Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Проблема с доступом к private-членам класса [D6]


DJones ©   (2008-10-13 11:09:00) 

Вот такой класс, при попытке обратиться к  private - массивам в методах GetReg ил setReg  получаю Instance variable is inassessible here... Никак не могу понять, в чем моя ошибка ...

unit MyConfig;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs;

type // ôîðìà
 TMainForm = class(TForm)
 private
   { Private declarations }
 public
   { Public declarations }
end;

type
   rDataStructure = record
   reg             :Byte;
   value           :Byte;
  end;

TDataArray = array [1..30] of rDataStructure;

TDataArrayA = array [0..10] of rDataStructure;// ïîä ïàðàìåòðû ïîðòà ìîäóëÿ

type Config = class (TObject)

private

        dataArrA            : array [0..5] of TDataArrayA;
        dataarrayB          : array [0..33] of rDataStructure;

public

        constructor  Create;
        class function getReg (port, reg: byte) : byte;
        class function setReg (port, reg, value : byte) : Boolean;
end;

var
 MainForm: TMainForm;

implementation

{$R *.dfm}

class function Config.getReg (port, reg: byte) : Byte;
var i : integer;
begin

end; // Getreg

constructor Config.Create;
var port, i: Integer;
begin

dataArrA[0][1].reg:=0;

end; // Create

class function Config.setReg (port, reg, value : byte) : Boolean;

var i : integer; // ïðîñòî ñ÷åò÷èê äëÿ öèêëà

begin

//dataArrA[0][1].reg:=0;

end; // SetReg

end.


Leonid Troyanovsky   (2008-10-14 22:49:00) [1]


> DJones   (14.10.08 15:42) [16]

> Совершенно верно, проблему нашел - криво вызывал конструктор
> - mc.Create вместо  mc:=Config.Create

http://podgoretsky.com/OtherParts/DM/BadTips.aspx?#08

--
Regards, LVT.


Сергей М.   (2008-10-14 15:59:00) [2]


> DJones   (14.10.08 15:33) [13]


Не обязан.
Они автоматически заполняются нулями (в тех или иных ипостасях нуля).


DJones   (2008-10-14 15:42:00) [3]

Совершенно верно, проблему нашел - криво вызывал конструктор - mc.Create вместо  mc:=Config.Create


Плохиш   (2008-10-14 15:39:00) [4]


> DJones   (14.10.08 15:02) [11]
> Еще одна прблема в данной проге - после выполнения конструктора
> приходит 'Asess violation  ... at module', все проверил,
>  даже с пустым телом конструктора то же самое... Объект
> класса создается в другом юните, в uses которого модуль
> MyConfig прописан ....

Бессмысленные слова, не имеющие никакого отношения к проблеме.


Плохиш   (2008-10-14 15:37:00) [5]


> DJones   (14.10.08 15:33) [13]
> В конструкторе я обязан проинициализировать ВСЕ поля класса?

Если они являются указателями, то - да.


DJones   (2008-10-14 15:33:00) [6]

В конструкторе я обязан проинициализировать ВСЕ поля класса?


Ega23   (2008-10-14 15:23:00) [7]


> после выполнения конструктора приходит 'Asess violation
>  ... at module', все проверил, даже с пустым телом конструктора
> то же самое... Объект класса создается в другом юните, в
> uses которого модуль MyConfig прописан ....


Это означает, что ты обращаешься к чему-то, ещё не созданному (или непроинициализированному), или уже убитому, но с сохранением указателя.

Очень помогает F7-F8.


DJones   (2008-10-14 15:02:00) [8]

Еще одна прблема в данной проге - после выполнения конструктора приходит 'Asess violation  ... at module', все проверил, даже с пустым телом конструктора то же самое... Объект класса создается в другом юните, в uses которого модуль MyConfig прописан ....


DJones   (2008-10-13 11:37:00) [9]

ок, спасибо,понял!


Поросенок Винни-Пух   (2008-10-13 11:34:00) [10]

class function это то, что у еретиков называется статиком


Поросенок Винни-Пух   (2008-10-13 11:32:00) [11]

сам-то подумай.
для вызова классового метода не нужен экземпляр.
и из какого именно экземпляра из сотни уже созданных он должен брать значение поля?


DJones   (2008-10-13 11:32:00) [12]

я на измене, я на измене


DJones   (2008-10-13 11:25:00) [13]

Разве метод КЛАССА не должен иметь доступа к private полям класса?


DJones   (2008-10-13 11:19:00) [14]

нет, я сишник, в паскале вообще не бумбум пока что(((


Ega23   (2008-10-13 11:13:00) [15]

Чем class functionот просто functionотличается - знаешь?


Сергей М.   (2008-10-13 11:12:00) [16]

Убери слово "class" из деклараций методов getReg и setReg


Поросенок Винни-Пух   (2008-10-13 11:12:00) [17]

методы класса не имеют доступа к любым полям этого класса. не только приватным


DJones   (2008-10-13 11:11:00) [18]

Помогите, пожалуйста, разобраться с этим примером!


Наверх

Титульная страница Поиск, карта сайта Написать письмо