Nieobeznany napisał(a)
Jak zwykle odpowiedz na moje pytanie byla prosta... Poradzilem sobie dodajac przed impementation po prostu:
function funkcja(zmienna : ShortString): ShortString;
uru napisał(a)
to sie nazywa ...forward declaration... :) poczytaj tez o ...scope...
Mialem wlasnie napisac, ale dobrze ze sobie poradziles sam:) Oby tak dalej
Niestety, kolego uru, nie o forward declaration tutaj chodzi. Problemem jest brak definicji funkcji w sekcji publicznej modułu.
Aby funkcje, procedury, zmienne, typy były dostępne w innych modułach, które korzystają z naszego modułu, musimy je zadeklarować w sekcji publicznej, czyli po słowie interface, a przed słowem implementation. Autor wątku to właśnie uczynił, co rozwiązało problem
Jeśli chodzi o forward declaration, oto przykład:
Kopiuj
function MyFunc: Integer;
begin
MyProc;
end;
procedure MyProc;
begin
end;
Kompilator zgłasza błąd: "Undeclared identifier 'MyProc'", gdyż w momencie napotkania definicji funkcji MyFunc nie wie jeszcze co to jest MyProc. Można temu zaradzic zamieniając miejscami definicje funkcji i procedury, albo zastosować forward declaration
Kopiuj
procedure MyProc; forward
function MyFunc: Integer;
begin
MyProc;
end;
procedure MyProc;
begin
end;
Teraz jest wszystko OK. Najpierw deklarujemy sam nagłówek procedury, a w dalszej części modułu umieszczamy jej definicję