Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.036 c
1-1098148359
Simon
2004-10-19 05:12
2004.11.07
Прозрачная форма


14-1097828372
stone
2004-10-15 12:19
2004.11.07
Пятница: Альтернативные задачки


3-1097224039
Koala
2004-10-08 12:27
2004.11.07
Временные таблицы в Firebird 1.5.1


1-1098634662
DIS
2004-10-24 20:17
2004.11.07
работа с реестром


14-1097911291
MYSTERYO
2004-10-16 11:21
2004.11.07
Ставлю сетевуху - не инициализируется видео-карта,





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский