Вниз
Скачать: CL | DM;

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 вся ветка

Скачать: CL | DM;



Память: 0.49 MB
Время: 0.021 c
14-1097705686
Piter
2004-10-14 02:14
2004.11.07
Позор... Россия 1 - 7 Португалия


3-1096816746
Muchacho
2004-10-03 19:19
2004.11.07
Unicode в InterBase


3-1096895604
Alex_V
2004-10-04 17:13
2004.11.07
Как избавиться от изменения размеров


14-1098004825
QuasiLamo
2004-10-17 13:20
2004.11.07
Вот, чиста маё мнение


14-1097933511
Duys
2004-10-16 17:31
2004.11.07
VB мы Delphi




   Наверх