Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.12.20;
Скачать: CL | DM;

Вниз

Как сделать чтобы функция возвращала массив   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.016 c
2-1256962231
xucc
2009-10-31 07:10
2009.12.20
Помогите найти компонент NxCustomGridControl.pas


15-1255897809
Юрий
2009-10-19 00:30
2009.12.20
С днем рождения ! 19 октября 2009 понедельник


3-1231686479
Чайник
2009-01-11 18:07
2009.12.20
Метод Locate - проблема с апострофом в строке поиска


1-1228671974
vaBRAMYAK
2008-12-07 20:46
2009.12.20
Вызов функции из DLL и конвертация типов


2-1257362090
bagi
2009-11-04 22:14
2009.12.20
создание профилей настроек