Wywołanie Funkcji
Ostatnio zmodyfikowano 2013-01-29 16:58
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ć. |
|
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/169Po 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: 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.
void funkcjaA( void ); void funkcjaB( void );
void funkcjaA( void ) { funkcjaB(); }
void funkcjaB( void ) { funkcjaA(); }
|
|
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ść. :( |
|
SeaMonster131 |
» 2013-01-29 16:00:03 Bo tak je napisałeś? Powiedz co chcesz osiągnąć. |
|
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ć. |
|
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: cout << "Wywluje funkcje"; funkcja();
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ść. |
|
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... |
|
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
|
|
1 « 2 » |