Форум: "Начинающим";
Текущий архив: 2008.11.23;
Скачать: [xml.tar.bz2];
ВнизПроблема с доступом к 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;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.005 c