Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Incompatible types [D5]


TBeginner ©   (2002-08-22 16:28:00) 

unit Unit1;

interface

type

TStatus = (StatusOn, StatusOff, StatusUnknown);

TDriveInfo = packed record
Letter : String;
Status : TStatus;
end;

PInteger = ^Integer;
PDriveInfo = ^TDriveInfo;

TMyList = class
protected
FDelta, FCount, FCapacity: Integer;
FItems: array of Pointer;
function GetPointer(Index: Integer): Pointer;
function IndexOf(Item: Pointer): Integer;
procedure Add(Item: Pointer);
procedure Delete(Index: Integer);
procedure Remove(Item: Pointer);
procedure Clear;
procedure Pack;
public
constructor Create(Delta: Integer);
destructor Destroy; override;
end;

TIntList = class(TMyList)
private
function Get(Index: Integer) : Integer;
public
function IndexOf(Item: Integer): Integer; reintroduce; overload;
procedure Add(Item: Integer); reintroduce; overload;
procedure Remove(Item: Integer); reintroduce; overload;
property Items[Index : Integer]: Integer read Get;
end;

TDriveInfoList = class(TMyList)
private
function Get(Index: Integer) : TDriveInfo;
public
function IndexOf(Item: TDriveInfo): Integer; reintroduce; overload;
procedure Add(Item: TDriveInfo); reintroduce; overload;
procedure Remove(Item: TDriveInfo); reintroduce; overload;
property Items[Index : Integer]: TDriveInfo read Get;
end;

implementation

{ Описание TMyList я пропускаю - там ошибок не возникает}

{ TIntList class }

function TIntList.IndexOf(Item: Integer): Integer;
var
I: Integer;
ItemPointer: PInteger;
begin
Result := -1;
I := 0;
if FItems <> nil then
while (Result = -1) and (I <= FCount - 1) do
begin
ItemPointer := FItems[I];
if ItemPointer^ = Item then Result := I; { Здесь всё нормально }
Inc(I);
end;
end;

{. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .}

{ TDriveInfoList class }

function TDriveInfoList.IndexOf(Item: TDriveInfo): Integer;
var
I: Integer;
ItemPointer: PDriveInfo;
begin
Result := -1;
I := 0;
if FItems <> nil then
while (Result = -1) and (I <= FCount - 1) do
begin
ItemPointer := FItems[I];
if ItemPointer^ = Item then Result := I; { Здесь ошибка - Incompatible types }
Inc(I);
end;
end;

end.

Почему?


Skier   (2002-08-22 17:03:00) [1]

>TBeginner



type
TStatus = (StatusOn, StatusOff, StatusUnknown);
TDriveInfo = packed record
Letter : String;
Status : TStatus;
end;
var
AFirst : TDriveInfo;
ASecond : TDriveInfo;
begin
FillChar(AFirst, SizeOf(TDriveInfo), 0);
FillChar(ASecond, SizeOf(TDriveInfo), 0);
if AFirst = ASecond then begin
ShowMessage("Я сравнил записи и обманул Delphi !")end; //if
end;


andy_prokofiev   (2002-08-22 16:58:00) [2]

Извините
while (Result = -1) and (I <= FCount - 1) do
begin
if TDriveInfo(FItems[i]) = Item then Result := I;
Inc(I);
end;


TBeginner   (2002-08-22 16:56:00) [3]

> Skier

Не понял (извините за тупость :-).

> andy_prokofiev

Так ведь FItems[i] - это Pointer, а Item - это TDriveInfo.


andy_prokofiev   (2002-08-22 16:44:00) [4]

while (Result = -1) and (I <= FCount - 1) do
begin
if FItems[i] = Item then Result := I;
Inc(I);
end;


Skier   (2002-08-22 16:39:00) [5]

>TBeginner

Operator : =

Operand types:

simple, class, class reference, interface, string, packed string


Наверх

Титульная страница Поиск, карта сайта Написать письмо