Форум: "Основная";
Текущий архив: 2004.11.07;
Скачать: [xml.tar.bz2];
ВнизClass. Вопросы. Найти похожие ветки
← →
Temporary (2004-10-21 14:42) [0]Что-то я туплю :(
Посмотрите пожалуйста.
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
← →
Digitman © (2004-10-21 14:45) [1]
> В любом месте FComputers: Inaccessible value
это - работа оптимизатора.
отнюдь не означающая некие проблемы с этим полем
← →
Temporary (2004-10-21 14:51) [2]Ну хорошо.
А как же тогда:
function TComputers.Count(): integer;
begin
if FComputers<>nil then Result:=Length(FComputers) else Result:= 0;
end;
Он же не nil?
← →
Temporary (2004-10-21 14:54) [3]Или Add например:
function TComputers.AddItem(const Value: TComputerRec):integer;
begin
SetLength(FComputers,Length(FComputers)+1);
SetItem(Length(FComputers)-1, Value);
Result:=Length(FComputers)-1;
end;
← →
Ega23 © (2004-10-21 14:56) [4]Сделай
TComputerRec = class
и не мучайся.
← →
clickmaker © (2004-10-21 14:58) [5]
> [2] Temporary (21.10.04 14:51)
пока не скажешь SetLength - nil
← →
Temporary (2004-10-21 15:05) [6]clickmaker © (21.10.04 14:58) [5]
В каком месте? На Create?
← →
Temporary (2004-10-21 15:06) [7]Ega23 © (21.10.04 14:56) [4]
Сделать-то не хитро :) Хочется понять в этом конкретном случае, где туплю.
← →
Digitman © (2004-10-21 15:14) [8]
> Temporary
мне не понятна дурь с использованием дин.массивов в таком применении
есть TLIst, чем он хуже ?
← →
-=SS=- © (2004-10-21 15:19) [9]FComputers: array of TComputerRec; --- это динамический массив
Вы под него памать достаточно выделяете. Если вообще выделяете
← →
Ega23 © (2004-10-21 15:22) [10]Хочется понять в этом конкретном случае, где туплю.
В проектировании модели хранения данных.
← →
Temporary (2004-10-21 16:10) [11]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;
← →
Temporary (2004-10-21 16:14) [12]Ошибся в последнем, конечно:
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) [13]Ошибся в последнем, конечно:
function TComputers.GetItem(index: integer): TComputerRec;
begin
Result:=FComputers[index];
end;
procedure TComputers.SetItem(index: integer; const Value: TComputerRec);
begin
FComputers[index]:=value;
end;
← →
Digitman © (2004-10-21 16:18) [14]
> Temporary (21.10.04 16:14) [13]
> Почему это работает:
> А это нет.
не выдумывай.
и то и другое судя по тексту обязано работать.
а то? что ты видишь под отладчиком? отнюдь не означает, что то или иное "не работает"
← →
Temporary (2004-10-21 16:33) [15]
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
← →
Ega23 © (2004-10-21 16:39) [16]Comps:=TComputers.Create;
И не гони.
← →
Temporary (2004-10-21 16:43) [17]Спасибо добрый человек. Я же говорю туплю :) Это после бессонной ночи. Извиняйте, если что не так.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.11.07;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.032 c