Minden megtalalt dokumentacio /gugli, hupwiki, konyv/ (meg a sajat ezer eves emlekeim) szerint a lenti kodot valahogy igy kell megirni. Ellenben FreePascal anyazik. Esetleg meg tudja valaki mondani, hogy hogyan kellene azt a rohadt forward hivatkozast megejteni ahhoz, hogy le is forduljon?
program lo;
procedure egy( dd: longint );forward;
procedure ketto( d: longint );
var i:longint;
begin
i := d * d;
egy( i );
writeln( 'Ez itt a ketto: ', i );
end;
procedure egy;
var i: longint;
begin
i := dd * dd;
writeln( 'Ez itt az egy: ', i );
end;
BEGIN
egy( 8 );
ketto( 8 );
END.
Es ez itt a fordito nyavalygasa:
$ fpc x
Free Pascal Compiler version 2.2.2 [2009/02/22] for i386
Copyright (c) 1993-2008 by Florian Klaempfl
Target OS: FreeBSD/ELF for i386
Compiling x.pas
x.pas(17,9) Error: Identifier not found "dd"
x.pas(17,13) Error: Identifier not found "dd"
x.pas(25) Fatal: There were 2 errors compiling module, stopping
Fatal: Compilation aborted
Error: /usr/local/bin/ppc386 returned an error exitcode (normal if you did not specify a source file to be compiled)
$
De mi a jo edes anyjaert nem latja?
Hozzászólások
No erre jo egy forum. Miutan mar kb 2 oraja szenvedek vele, kiderult. Ellentetben a doksikkal - legalabbis FreeBSD-n a FreePascal 2.2.2 - elvarja, hogy az elorehivatkozott eljaras teljes fejlecet megadjuk megegyszer. Azaz:
procedure ketto( i: longint);forward;
procedure ketto( i: longint);
begin
..
end;
formaban. Az en ezer eves konyvem, a hupwiki-fele pascal szocikk, meg a net kismillio peldaja szerint nem igy kell. De legalabb megy.
Kedves Zahy!
ftp://ftp.freepascal.org/pub/fpc/docs-pdf/ref.pdf
FreePascal Language Reference,
Chapter 11. Using Functions and Procedures,
11.5 Forward defined functions
Ott a példa, pont olyan, mint amit Te is szerettél volna csinálni.
Megjegyzés: a paraméterlistát vélhetően azért is kellett leírni pontosan, hogy a fordító be tudja azonosítani, hogy a programozó melyik kézjeggyel (szignatúrával) ellátott eljárásra hivatkozik hamarabb, mint ahogyan azt a forráskódban deklarálták. Ez -- részben egyetértve egy korábbi hozzászólóval -- hasonlít ugyan az OOP-ben levő túlterheléshez (overloading), bár ez a Pascal-ban OOP nélkül is megy gondoljunk csak a
illetve
eljárások különböző típusú paramétereire.
G.
============================================
"Share what you know. Learn what you don't."
Overloadingnak mi köze az OOP-hez? AFAIK az overloading azt jelenti, hogy azonos néven több eljárás is van különböző paraméteretéssel, és a fordító a paraméterezés alapján dönti el, hogy melyiket hívja. Mindegy, hogy sima eljárásról vagy osztálymetódusról van szó.
Kedves gd!
Jogos, összekevertem -- ill. összemostam -- az overloading-ot a polimorfizmussal...
G.
============================================
"Share what you know. Learn what you don't."
Koszi, egyetlen probléma volt - nem volt feltelepítve a megfelelő csomag, ezért nem a FreePascal doksit olvasgattam, hanem a meglevő eszközöket nézegettem. A hibát azóta javítotam :-)
Vígaszul: http://en.wikibooks.org/wiki/Pascal_Programming/Syntax_and_functions
Ez olyan, amikor elkezd veszekedni veled egy nő, te közlöd vele, hogy na, erről majd később beszélünk, nos ha odaértek, nem elég megmondani, hogy akkor most beszéljünk a problémáról, hanem jól ki kell fejteni,hogy akkor most melyikről is. Mert ugye túl is lehet terhelve (overload) a probléma, és akkor nem tudod, melyikről akar beszélni veled. :)
Szép kis hasonlat :D
Úgy tűnik, Free Pascal-ban azért kell újra kiírni a fejlécet, mert (a Turbo Pascallal és a Delphivel ellentétben) alapértelmezés szerint az overload-os definícióknál nem kell kiírni az overload direktívát, hanem ha egy függvény kétszer különböző paraméterlistával van deklarálva, akkor automatikusan overload-osok lesznek. Delphi kompatibilis módban ki kell tenni az overload-ot, és ennek megfelelően a forward deklarált eljárás definiálásakor se kell kiírni a paraméterlistát.