Uzywanie funkcji

0

Witam! Mam problem ktory probuje szybko rozwiazac! Otoz mam Unit1 i w nim funkcje i chcialbym tych funkcji uzyc w Unit2 jak to zrobic ?
Probowalem Unit1.Form1. ale te funkcje sa nie widocznie w zaden sposob ich nie widzi.

Prosze o podpowiedz co zrobic zeby funkcje z Unit1 byly widocznie w Unit2 z gory dziekuje za odpowiedz!

0

w unit2 poniżej "implementation" dodaj "uses unit1;".

0

Oczywiscie taki kod znajduje sie w Unit2 dodam ze unit2 to jest "nowy watek" (Thread Object).
I niestety nadal nie widzi funkcji z Unit1 widzi wszystkie zmienne widzi procedury takie jak onclick itp. ale funkcji wlasnie nie.

0

A gdzie sa te deklaracje tych funkcji, przed czy po implementation? Czy sa to moze prywatne funkcje, publicze, czy jakie? Jesli sa prywatne albo nie wystepuja w w odpowiednim bloku, to masz odpowiedz dlaczego unit2 ich nie widzi (czytaj 'scope').

0

Fakt troszke brakuje informacji w moich postach wiec teraz postaram sie wszystko wyjasnic a wiec:

nie znajduje sie ani w public ani private to po prostu mam tak:

  private
    { Private declarations }
  public
   { public declarations }
  end;

funkcje sa pod

implementation

uses Unit2;


{$R *.dfm}

Probowalem przeniesc implementation pod wszystkie funkcje ale wtedy jest blad w uses2 unit2;
probowalem przeniesc wszystko pod funkcje ale wtedy wyskakuje od razu blad przy bloku begin.
Pod public declarations probowalem dolepic ta funkcje tak:

function funkcja(zmienna : ShortString): ShortString;
kolejnie dorobilem blok published ale tez nie wykrywa i sypie bledami od razu.

Ps. wszystkie funkcje z Uni1 znajduja sie dokladnie pod:

implementation

uses Unit2;


{$R *.dfm}

Chcialbym jeszcze dodac ze to nie jest tak ze jak tylko napotkam jakas przeszkode od razu pisze na forum. Probuje na wszystkie sposoby rozwiazac problem szperam w google ale gdy juz nie widze odpowiedzi na dany to napisze na forum...

Szukalem scope na forum za wiele nie ma. Google tez za duzo niestety mi nie mowi...

Jak zwykle odpowiedz na moje pytanie byla prosta... Poradzilem sobie dodajac przed impementation po prostu:

function funkcja(zmienna : ShortString): ShortString;

:)

0

to sie nazywa ...forward declaration... :) poczytaj tez o ...scope...

Mialem wlasnie napisac, ale dobrze ze sobie poradziles sam:) Oby tak dalej

0

Oczywiscie dzieki wielkie za wskazowki ;) na pewno poczytam :)

0
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:

function MyFunc: Integer;
begin
  MyProc;
end;

procedure MyProc;
begin
  // Instrukcje
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

procedure MyProc; forward

function MyFunc: Integer;
begin
  MyProc;
end;

procedure MyProc;
begin
  // Instrukcje
end;

Teraz jest wszystko OK. Najpierw deklarujemy sam nagłówek procedury, a w dalszej części modułu umieszczamy jej definicję

0

Niestety, kolego uru, nie o forward declaration tutaj chodzi. Problemem jest brak definicji funkcji w sekcji publicznej modułu.

Delphi help: The interface section napisał(a)

The interface declaration of a procedure or function includes only the routine's heading. The block of the procedure or function follows in the implementation section. Thus procedure and function declarations in the interface section work like forward declarations, although the forward directive isn't used.

Delphi help: Forward and interface declarations napisał(a)

The forward directive has no effect in the interface section of a unit. Procedure and function headers in the interface section behave like forward declarations and must have defining declarations in the implementation section. A routine declared in the interface section is available from anywhere else in the unit and from any other unit or program that uses the unit where it is declared.

To nie jest usprawiedliwienie moich slow, czy mojego nieoczytania. Przepraszam za moja mape skojarzen. Tak czy inaczej znalazlby bez wiekszego trudu.
A co do forward declaration w helpie borlanda to wyjasnione sa na interfejsach...

Ogolnie to idea jest identyczna. Uzywasz czegos, co nie zostalo do konca zdefiniowane w twoim polu widzenia. A poczytałby troche wiecej, a jak to mawiaja na studiach, trzeba wiedziec gdzie szukac. Stad moj blad :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1