![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Class. Вопросы. [D6, WinXP]
Temporary © (2004-10-21 14:42:00)Что-то я туплю :(
Посмотрите пожалуйста.
type
TComputerRec = Record
CompName:string;
CompDescription:String;
end;
type
TComputers = class
private
FComputers: array of TComputerRec;
function GetItem(index: integer): TComputerRec;
procedure SetItem(index: integer; const Value: TComputerRec);
public
function Count():integer;
property Computer[index : integer] : TComputerRec read GetItem Write SetItem;
end;
В любом месте FComputers: Inaccessible value
Temporary (2004-10-21 16:43:00) [1]Спасибо добрый человек. Я же говорю туплю :) Это после бессонной ночи. Извиняйте, если что не так.
Ega23 (2004-10-21 16:39:00) [2]Comps:=TComputers.Create;
И не гони.
Temporary (2004-10-21 16:33:00) [3]
var
Comps:TComputers;
...
procedure Tfrm_Main.FormCreate(Sender: TObject);
...
Comps.Create();
...
end;
Вот на этом вываливается:
Access violation at address 00403AD5 in module 'some.exe'. Read of address 00000000.
В CPU этоCall @AfterConstruction
Digitman (2004-10-21 16:18:00) [4]
> Temporary (21.10.04 16:14) [13]
> Почему это работает:
> А это нет.
не выдумывай.
и то и другое судя по тексту обязано работать.
а то? что ты видишь под отладчиком? отнюдь не означает, что то или иное "не работает"
Temporary (2004-10-21 16:14:00) [5]Ошибся в последнем, конечно:
function TComputers.GetItem(index: integer): TComputerRec;
begin
Result:= FComputers[index];
end;
procedure TComputers.SetItem(index: integer; const Value: TComputerRec);
begin
FComputers[index]:=value;
end;
Temporary (2004-10-21 16:14:00) [6]Ошибся в последнем, конечно:
function TComputers.GetItem(index: integer): TComputerRec;
begin
Result:= FComputers[index];
end;
procedure TComputers.SetItem(index: integer; const Value: TComputerRec);
begin
FComputers[index]:=value;
end;
Temporary (2004-10-21 16:10:00) [7]Digitman © (21.10.04 15:14) [8]
Я и не говорю, что он хуже, но мы не ищем легких путей.
to all
Все такие умные, просто диву даешься!!! Проектирование, TList, TComputerRec = class и не мучайся, а сказать почему ЭТОТ код не работает никто не может. :((((((((((((((
Почему это работает:
type
TIOWhoUsers = Class
private
FIOWhose : array of string;
function GetIOWhose(index: integer): string;
procedure SetIOWhose(index: integer; const Value: string);
public
property IOWhose [index : integer]: string read GetIOWhose write SetIOWhose;
end;
function TIOWhoUsers.GetIOWhose(index: integer): string;
begin
Result:=FIOWhose[index];
end;
procedure TIOWhoUsers.SetIOWhose(index: integer; const Value: string);
begin
FIOWhose[index]:=Value;
end;
А это нет.
type
TComputerRec = Record
CompName:string;
CompDescription:String;
end;
type
TComputers = class
private
FComputers: array of TComputerRec;
function GetItem(index: integer): TComputerRec;
procedure SetItem(index: integer; const Value: TComputerRec);
public
property Computer[index : integer] : TComputerRec read GetItem Write SetItem;
end;
function TComputers.GetItem(index: integer): TComputerRec;
begin
Result:=Computer[index];
end;
procedure TComputers.SetItem(index: integer; const Value: TComputerRec);
begin
Computer[index]:=value;
end;
Ega23 (2004-10-21 15:22:00) [8]Хочется понять в этом конкретном случае, где туплю.
В проектировании модели хранения данных.
-=SS=- (2004-10-21 15:19:00) [9]FComputers: array of TComputerRec; --- это динамический массив
Вы под него памать достаточно выделяете. Если вообще выделяете
Digitman (2004-10-21 15:14:00) [10]
> Temporary
мне не понятна дурь с использованием дин.массивов в таком применении
есть TLIst, чемон хуже ?
Temporary (2004-10-21 15:06:00) [11]Ega23 © (21.10.04 14:56) [4]
Сделать-то не хитро :) Хочется понять в этом конкретном случае, где туплю.
Temporary (2004-10-21 15:05:00) [12]clickmaker © (21.10.04 14:58) [5]
В каком месте? На Create?
clickmaker (2004-10-21 14:58:00) [13]
> [2] Temporary (21.10.04 14:51)
пока не скажешь SetLength - nil
Ega23 (2004-10-21 14:56:00) [14]Сделай
TComputerRec = classи не мучайся.
Temporary (2004-10-21 14:54:00) [15]Или Add например:
function TComputers.AddItem(const Value: TComputerRec):integer;
begin
SetLength(FComputers,Length(FComputers)+1);
SetItem(Length(FComputers)-1, Value);
Result:=Length(FComputers)-1;
end;
Temporary (2004-10-21 14:51:00) [16]Ну хорошо.
А как же тогда:
function TComputers.Count(): integer;
begin
if FComputers<>nil then Result:=Length(FComputers) else Result:= 0;
end;
Он же не nil?
Digitman (2004-10-21 14:45:00) [17]
> В любом месте FComputers: Inaccessible value
это - работа оптимизатора.
отнюдь не означающая некие проблемы с этим полем