Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Wywołanie Funkcji

Ostatnio zmodyfikowano 2013-01-29 16:58
Autor Wiadomość
Mrovqa
» 2013-01-28 21:14:45
Nie napisałeś co chcesz osiągnąć. Dałeś tylko kod, który się zapętla (nieskończona rekurencja pośrednia). Wywal po prostu wywołanie funkcja() w funkcjapierwsza() to nie powinno się nic zapętlić.
P-75267
unimator
» 2013-01-28 21:27:11
Po 1. Kodowanie. Przeczytaj ten poradnik i zacznij kodować kod źródłowy:
http://cpp0x.pl/kursy/Kurs-STC/169

Po 2. Olej wszystkie komentarze, może z wyjątkiem drugiego, który był najbliżej.
Nazwijmy Twoje funkcje zgodnie z kolejnością w jakiej występują w kodzie:
C/C++
funkcjaA();
funkcjaB();
Ich treść nie ma teraz znaczenia poza faktem, że jedna wywołuje drugą. I tutaj pojawia się Twój problem. Funkcja "funkcjaA" (a właściwie kompilator) na etapie definicji nie ma jeszcze zielonego pojęcia o istnieniu funkcji "funkcjaB". To dosyć logiczne, bo znajduje się ona dalej w kodzie. Zamiana funkcji miejscami również nie rozwiązuje problemu (nazwy funkcji są umowne, teoretycznie żadna z nich nie jest pierwsza czy druga). Rozwiązaniem problemu jest skorzystanie z wstępnej deklaracji funkcji. Deklaracja to takie jakby zarezerwowanie jakiejś nazwy jako funkcji/zmiennej o danym typie (i ewentualnie parametrach). Jej późniejsza definicja (czyli napisanie dla niej ciała [tego co jest w klamrach]) może nastąpić gdzieś dalej w kodzie. W praktyce wygląda to mniej więcej tak.
C/C++
/* Teoretycznie wystarczy zadeklarowac tylko jedna
funkcje ale ten sposob jest jasniejszy i wyraznie
pokazuje, ze funkcje sa rownozedne. Rowniez dzieki
dwom deklaracjom mozemy zadecydowac o kolejnosci
definicji jesli ma to dla nas jakies znaczenie.
Ogolnie - estetyka ponad wszystko :)*/
void funkcjaA( void ); //slowko void mozna pominac
void funkcjaB( void ); //jak nie chcesz to nie pisz

void funkcjaA( void )
{
    funkcjaB();
}

void funkcjaB( void )
{
    funkcjaA();
}
P-75271
nvkk
Temat założony przez niniejszego użytkownika
nadal.
» 2013-01-29 14:30:32
Dzięki unimator, lecz i tak program dalej nie działa.Funkcje wywołują się w nie skończoność. :(
P-75300
SeaMonster131
» 2013-01-29 16:00:03
Bo tak je napisałeś? Powiedz co chcesz osiągnąć.
P-75302
nvkk
Temat założony przez niniejszego użytkownika
..
» 2013-01-29 16:18:30
Napisalem tak samo lecz dodałem tylko w obu funkcjach : cout <<cos"; aby wiedziec ze funkcje się wywołały.Napisałeś : Powiedz co chcesz osiągnąć.
Chcę aby wywoływać funkcje tylko nie wiem jak je wcześniej zadeklarować.
P-75306
unimator
» 2013-01-29 16:34:29
Ehhh... weź to na logikę. Jeśli funkcjaA wywołuje funkcjaB oraz funkcjaB wywołuje funkcjaA, to wywołanie którejkolwiek z nich da w efekcie coś na kształt pętli nieskończonej (dokładniej rekurencji nieskończonej). Jedna funkcja, będzie wywoływać drugą i na odwrót bo tak to napisałeś.
Jeśli chcesz po prostu wywołać obie funkcje raz, to wpierw wywołujesz funkcjaA a potem funkcjaB w funkcji main. Nie wiążesz jednak ich wywołań jeśli są sobie równoległe.
Również możliwe, że źle zrozumiałeś tą linijkę we własnym kodzie:
C/C++
cout << "Wywluje funkcje";
funkcja(); //Tu blad
Zakładam, że zakładasz iż w konsoli pojawi się coś takiego:

Wywluje funkcje funkcja.
Oczywiście jest to błędne założenie bo nie da się wypisać nazwy funkcji. Jest ona tylko pomocniczym aliasem dla programisty i kompilatora. W gotowym programie nie można się na tą nazwę powoływać (a już na pewno nie w taki sposób). Innymi słowy, każde wystąpienie słowa "funkcja();" jest równoważne z wywołaniem tejże funkcji, nieważne w jakim kontekście byś chciał tej funkcji użyć. Jeśli tego nie rozumiesz to po prostu w każde miejsce gdzie to słowo się znajduje wklej treść tejże funkcji. Zobaczysz, że w efekcie będziesz wklejał tak jedną funkcję za drugą w nieskończoność.
P-75308
RazzorFlame
» 2013-01-29 16:39:00
To jest bez sensu...
Twój program wygląda tak:
-> Wywołaj funkcje "funkcja()"                                    <--|
   ->(w "funkcja()") wywołaj funkcje "funkcjapierwsza()"       |
      -> (w "funkcjapierwsza()") wywołaj funkcję "funkcja" -->|
I tak w nieskączoność... Wywołujesz funkcję1 w funkcji2 która zaś wywołuje funkcje1 ktora wywoluj funkcji2 i tak w nieskaczonosc...
P-75309
nvkk
Temat założony przez niniejszego użytkownika
Rozwiązany
» 2013-01-29 16:58:09
Ok dzięki wszystkim za pomoc.Problem rozwiązany :)
Ps. Idę się jeszcze poduczyć funkcji.Temat zamykam
P-75312
1 « 2 »
Poprzednia strona Strona 2 z 2