2011-04-24 66 views
0

是有辦法的功能打電話給對方即C++函數問題

void menu() 
{ 
some code here 
play(); 
... 
} 

int play() 
{ 
... 
menu(); 
... 
return 0; 
} 
+0

你試過了嗎?它不適合你嗎? – 2011-04-24 14:09:52

+0

是的,我做了,但沒有奏效。我是一個新手,我知道:D – Martin 2011-04-24 14:17:30

回答

3

在你的代碼文件的頂部添加第二個函數的聲明:

int play(); 

void menu() 
{ 
    // some code here 
    play(); 
    // ... 
} 

int play() 
{ 
    // ... 
    menu(); 
    // ... 
    return 0; 
} 

這就是所謂的forward declaration,並通知標識符將在稍後宣佈的編譯器。
這是一種表示函數的方法,以便您在提供完整定義之前可以調用它。

+1

從技術上講,這是一個很好的答案,但實際上它會導致堆棧溢出。 – 2011-04-24 14:35:30

+0

對。你必須確保函數內部有一些邏輯阻止他們無限地調用對方。這會產生無限循環和堆棧溢出錯誤。這可以像使用「if」語句實現的警衛原因一樣簡單。有關遞歸函數調用的更多信息可用[在這裏,剛剛被問到的問題](http://stackoverflow.com/questions/5770597/recursive-loop-c)。 – 2011-04-24 14:52:47

1

是的,但是這是幾乎從來沒有你想,因爲不小心使用將打破棧做什麼。