Форум: "Начинающим";
Текущий архив: 2009.12.20;
Скачать: [xml.tar.bz2];
ВнизКак сделать чтобы функция возвращала массив Найти похожие ветки
← →
HRustBB (2009-10-30 16:00) [0]Пишу так:
function getChildNodesByName(nname:string): array of TXMLNode;
выдает ошибочку:
[Error] XMLWork.pas(31): Identifier expected but "ARRAY" found
← →
Медвежонок Пятачок © (2009-10-30 16:03) [1]ужас какой. массифф.
может просто возвращать IXMLNodeList?
← →
Медвежонок Пятачок © (2009-10-30 16:10) [2][Error] XMLWork.pas(31):
зачем все эти третьесторонние подпорки?
uses msxml2_tlb;
и вперед
ilist := xdoc.selectnodes("/root/child/grand_child_name");
← →
Anatoly Podgoretsky © (2009-10-30 16:14) [3]Синтаксис функций не такой
Func(Parameters): Type;
← →
Плохиш © (2009-10-30 16:17) [4]
> HRustBB (30.10.09 16:00)
>
> Пишу так:
Надо писать не так как хочется, а так как написано в описании используемого языка.
← →
HRustBB (2009-10-30 16:18) [5]
> ужас какой. массифф.
> может просто возвращать IXMLNodeList?
что за IXMLNodeList?
> [Error] XMLWork.pas(31):
>
> зачем все эти третьесторонние подпорки?
>
> uses msxml2_tlb;
>
> и вперед
>
> ilist := xdoc.selectnodes("/root/child/grand_child_name");
>
нужна именно "третесторонняя подпорка", видимо чтоб учеба медом не казалась )
← →
Polkin (2009-10-30 16:20) [6]Ф-ция возвращает массив:
...
type
TFuncRes = array of byte;
...
function Upya4ka : TFuncRes;
...
implementation
...
function Upya4ka;
var
a : TFuncRes;
begin
SetLength (a, 2);
a[0] := 0;
a[1] := 1;
Result := a;
end;
...
procedure TForm1.FormCreate(Sender: TObject);
begin
ShowMessage (IntToStr (Upya4ka[1]));
end;
...
end.
← →
Polkin (2009-10-30 16:21) [7]Хотя в функции вместо переменной a можно было сразу Result указать =)
← →
Сергей М. © (2009-10-30 16:22) [8]
> Identifier expected but "ARRAY" found
ARRAY - это не идентификатор
А компилятор в этом месте ожидает именно идентификатор (типа).
← →
HRustBB (2009-10-30 16:41) [9]
> Polkin
тут ситуация посложней, а именно:
type
TXMLNode = class(TObject)
name:string;
atributes: array of TAtributes;
text:WideString;
ChildNodes: array of TXMLNode;
private
{ Private declarations }
public
constructor create(nodename:string);
procedure addatribute(name, value:string);
procedure addtext(mytext:WideString);
procedure addchildnode(Node:TXMLNode);
function getChildNode(index:integer):TXMLNode;
function getChildNodesByName(nname:string): array of TXMLNode;// ошииибка!!!
function getText():WideString;
function getAtribute(name:string):String;
function getName():String;
end;
← →
Polkin © (2009-10-30 16:44) [10]
> HRustBB (30.10.09 16:41) [9]type
TFuncRes = array of TXMLNode;
.......
function Upya4ka : TXMLNode;
var
I : integer;
begin
SetLength (Result, 10);
For I := 0 to 9 do begin
Result[I] := TXMLNode.Create ("Йа элемент №" + IntToStr (I + 1));
end;
end;
← →
Polkin © (2009-10-30 16:45) [11]Сорри,
вместо этого
function Upya4ka : TXMLNode;
так
function Upya4ka : TFuncRes;
=)
← →
Сергей М. © (2009-10-30 16:45) [12]
> тут ситуация посложней
И чем же она "посложней" ?
← →
Polkin © (2009-10-30 16:47) [13]Аааааа.........вкурил - в этой ф-ции проблема - она должна возврщать тип массив эл-тов своего класса =)
function getChildNodesByName(nname:string): array of TXMLNode;
Сейчас придумаем =)
← →
Anatoly Podgoretsky © (2009-10-30 16:50) [14]
> function getChildNodesByName(nname:string): array of TXMLNode;
> // ошииибка!!!
И чем же она сложнее, когда она один в один с начальной, ни буквы не изменилось.
> function getChildNodesByName(nname:string): array of TXMLNode;
← →
Polkin © (2009-10-30 16:53) [15]Вот у него в чем дело:
В теории примерно так должно быть
TMyClass = class
function UUU : TMyClassArray;
end;
TMyClassArray = array of TMyClass;
тут копмилятор скажет, что не знает что такое TMyClassArray;
А ежели же перенести описание TMyClassArray выше чем описание класса, тогда компилятор скажет что низнает что такое TMyClass;
брррр......... заморочка %) С таким никогда не сталкивался.
← →
Медвежонок Пятачок © (2009-10-30 17:05) [16]брррр......... заморочка %) С таким никогда не сталкивался.
заморочка называется "упреждающее объявление класса"
← →
Polkin © (2009-10-30 17:07) [17]Тьфу ты блин, а я пытался как то обяъвить заранее TMyClassArray вместо TMyClass.....пятница блин, устал =)
А должно быть так:
tmyclass = class;
TMyClassArray = array of TMyClass;
TMyClass = class
function UUU : TMyClassArray;
end;
← →
Polkin © (2009-10-30 17:09) [18]Полностью и окончательно:
type
TXMLNode = class;
TXMLNodeArray = array of TXMLNode;
TXMLNode = class(TObject)
name:string;
atributes: array of TAtributes;
text:WideString;
ChildNodes: array of TXMLNode;
private
{ Private declarations }
public
constructor create(nodename:string);
procedure addatribute(name, value:string);
procedure addtext(mytext:WideString);
procedure addchildnode(Node:TXMLNode);
function getChildNode(index:integer):TXMLNode;
function getChildNodesByName(nname:string): TXMLNodeArray;
function getText():WideString;
function getAtribute(name:string):String;
function getName():String;
end;
← →
HRustBB (2009-10-30 17:10) [19]
> заморочка называется "упреждающее объявление класса"
А можно поподробней, если можно
← →
Медвежонок Пятачок © (2009-10-30 17:12) [20]строка 3 в [17]
← →
Polkin © (2009-10-30 17:13) [21]
> HRustBB (30.10.09 17:10) [19]
см. пост выше.
Там написаноTXMLNode = class;
Это говорит компилятору о том что такой класс будет описани где-то ниже.
Это нужно для того чтобы этоTXMLNodeArray = array of TXMLNode;
нормально обработалось.
А потом
TXMLNode = class(TObject)
...
end;
мы уже описываем сам класс.
← →
HRustBB (2009-10-30 17:26) [22]Polkin Спасибо большое, который раз уже на этом форуме нахожу то что нужно, а главное быстро ))
← →
Медвежонок Пятачок © (2009-10-30 17:30) [23]нужно другое. это не нужно.
:)
← →
Polkin © (2009-10-30 17:33) [24]
> HRustBB (30.10.09 17:26) [22]
Благодари Медвежонка Пятачка. Мой запутанный вечерне-пятничный мозг не смог бы догадаться об "упреждающее объявление класса". =)
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2009.12.20;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.004 c