Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
2-1257108265
Ivan
2009-11-01 23:44
2009.12.20
GET и амперсанд


2-1256792265
d@nger
2009-10-29 07:57
2009.12.20
Транзакция в TFIBdataset


1-1228221387
Yozch1
2008-12-02 15:36
2009.12.20
не работает CTRL-C !!!!


2-1256925793
-
2009-10-30 21:03
2009.12.20
Узнать версию OC.


2-1256817317
user51
2009-10-29 14:55
2009.12.20
не считывает данные из сетевого файла





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский