Форум: "Основная";
Текущий архив: 2003.02.13;
Скачать: [xml.tar.bz2];
Вниз
Кто-нибудь может объяснить это? Найти похожие ветки
← →
kull (2003-02-04 15:33) [0]Почему не компиляется данная конструкция?
procedure TForm1.FormCreate(Sender: TObject);
begin
if Assigned(TreeView1.Items[0].getNextSibling) then Exit;
end;
Выдает: "Variable required"
← →
Игорь Шевченко (2003-02-04 15:36) [1]F1 - Assigned
← →
oomneeq (2003-02-04 15:39) [2]
Assigned принимает аргументом переменную (пусть даже и процедурного ТИПА), а ты подсовываешь ему функцию
← →
kull (2003-02-04 15:46) [3]
> Игорь Шевченко © (04.02.03 15:36)
Unit
System
Category
pointer and address routines
Delphi syntax:
function Assigned(const P): Boolean;
> oomneeq © (04.02.03 15:39)
См. F1
А как вам это?
procedure TForm1.FormCreate(Sender: TObject);
begin
if Assigned(TreeView1.GetNodeAt(0,0)) then Exit;
end;
Компиляется на ура, TreeView1.GetNodeAt(0,0) тоже функция.
← →
gsu (2003-02-04 15:49) [4]Ура, вперед на новые подвиги ... (-:|~
← →
kull (2003-02-04 15:49) [5]И еще в догонку:
procedure TForm1.FormCreate(Sender: TObject);
begin
if Assigned(TTreeNode(TreeView1.Items[0].getNextSibling)) then Exit;
end;
Тоже отлично компиляется...
← →
Digitman (2003-02-04 15:55) [6]сделай так
if Assigned(TreeView1.Items[0].GetNextSibling()) then Exit;
и не парься с преобразованиями)
← →
kull (2003-02-04 16:01) [7]
> Digitman © (04.02.03 15:55)
Да действительно работает.
Сдается это глюк в компиляторе, может я не прав?
← →
Digitman (2003-02-04 16:08) [8]нет, не прав
цитирую
function getNextSibling: TTreeNode; {GetNextSibling conflicts with C++ macro}
Борланд сам предупреждает об этом
мог бы и сам взглянуть)))
← →
kull (2003-02-04 16:25) [9]
> {GetNextSibling conflicts with C++ macro}
Ну и что это значит?
Я что в C++ нахожусь?
← →
Игорь Шевченко (2003-02-04 16:40) [10]This error message occurs when you try to take the address of an expression or a constant.
program Produce;
var
I: Integer;
PI: ^Integer;
begin
PI := Addr(1);
end.
A constant like 1 does not have a memory address, so you cannot apply the operator or the Addr standard function to it.
program Solve;
var
I: Integer;
PI: ^Integer;
begin
PI := Addr(I);
end.
You need to make sure you take the address of variable.
← →
kull (2003-02-04 16:48) [11]
> Игорь Шевченко © (04.02.03 16:40)
еще раз:
if Assigned(TreeView1.GetNodeAt(0,0)) then Exit;
компиляется.
← →
Романов Р.В. (2003-02-04 17:29) [12]Возьмем для примера некоторую функцию AA
TTestF = function: TTreeNode;
function AA: TTreeNode;
begin
Result := nil;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
d: TTestF;
begin
d := AA;
// Проверим существует ли функция?
if Assigned(d) then
ShowMessage("Function Assigned")
else
ShowMessage("Function Not Assigned");
// А теперь проверим результат этой функции.
if Assigned(d()) then
ShowMessage("Result Assigned")
else
ShowMessage("Result Not Assigned");
end;
Так что по аналогии
if Assigned(TreeView1.GetNodeAt(0,0)) проверяет результат функции, а
if Assigned(TreeView1.Items[0].getNextSibling) приводит к ошибке, т.к. TreeView1.Items[0].getNextSibling не является ни указателем на переменную ни указателем на процедуру.
← →
kull (2003-02-04 17:38) [13]
> Романов Р.В. © (04.02.03 17:29)
Вот, спасибо большое! Наконец-то нашелся человек, который что-то понимает.
Теперь-то до меня дошло. Виноват ступил. :)
← →
Игорь Шевченко (2003-02-04 18:19) [14]kull © (04.02.03 17:38)
> Наконец-то нашелся человек, который что-то понимает.
Наконец-то нашелся человек, который разжевывает и в рот кладет.
← →
kull (2003-02-04 19:12) [15]
> Игорь Шевченко © (04.02.03 18:19)
Просто остальные разжевать не могут.
← →
gsu (2003-02-04 19:14) [16]>> Просто остальные разжевать не могут.
не у всех же такие чеслюсти (-:|~
← →
gsu (2003-02-04 19:15) [17]сорри, челюсти
← →
kull (2003-02-04 19:25) [18]
> Игорь Шевченко © (04.02.03 18:19)
Да и к тому же Addr и Assigned это разные вещи.
причем здесь Addr
судя по хелпу:
function Addr(X): Pointer;
function Assigned(const P): Boolean;
Assigned(TreeView1.Items[0].getNextSibling()) - компилится
Assigned(TreeView1.Items[0].getNextSibling()) - нет
← →
kull (2003-02-04 19:26) [19]
> Assigned(TreeView1.Items[0].getNextSibling()) - компилится
>
> Assigned(TreeView1.Items[0].getNextSibling()) - нет
поправочка
Assigned(TreeView1.Items[0].getNextSibling()) - компилится
Addr(TreeView1.Items[0].getNextSibling()) - нет
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.02.13;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.014 c