Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.11.23;
Скачать: CL | DM;

Вниз

Проблема с доступом к private-членам класса   Найти похожие ветки 

 
DJones   (2008-10-13 11:09) [0]

Вот такой класс, при попытке обратиться к  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.


 
DJones   (2008-10-13 11:11) [1]

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


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

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


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

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


 
Ega23 ©   (2008-10-13 11:13) [4]

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


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

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


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

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


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

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


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

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


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

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


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

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


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

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


 
Ega23 ©   (2008-10-14 15:23) [12]


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


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

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


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

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


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


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

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


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


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

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


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

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


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


> DJones   (14.10.08 15:33) [13]


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


 
Leonid Troyanovsky ©   (2008-10-14 22:49) [18]


> DJones   (14.10.08 15:42) [16]

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

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

--
Regards, LVT.



Страницы: 1 вся ветка

Текущий архив: 2008.11.23;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.014 c
2-1223872431
Fynjy
2008-10-13 08:33
2008.11.23
модуль печати


2-1223625398
Michael
2008-10-10 11:56
2008.11.23
Перевод Си-шного файла-описателя: ошибка при инициализации


6-1195580822
9899100
2007-11-20 20:47
2008.11.23
определить по IP клиента MAC адрес его сетевой


3-1210168602
dreamse
2008-05-07 17:56
2008.11.23
Пробелмы с компонентами


1-1202327820
Urvin
2008-02-06 22:57
2008.11.23
Замена TListView