2014-12-02 30 views
-3

我正在創建一個向用戶顯示消息的類,並詢問他們是否要返回到程序的開始位置,但消息函數位於與main()所在的位置不同的類中。我如何從不同的類訪問main()函數?如何從一個單獨的cpp文件在我的主cpp文件中調用main()?

這是我想要做的東西的例子:
的main.cpp文件:

int main() 
{ 
    Message DisplayMessage; 
    DisplayMessage.dispMessage(); 
    return 0; 
} 

Message.cpp文件:

void dispMessage(void) 
{ 
    cout << "This is my message" << endl; 
    //now how do I call main again in the main.cpp file? 
} 

謝謝!

+3

我不知道這是否或如何工作,但無論如何,我認爲你不應該這樣做,作爲肯定有更優雅的解決方案。 – Misch 2014-12-02 13:03:44

+0

你不叫* main,* ever *。 – Borgleader 2014-12-02 13:05:30

+0

您可以使用'dispMessage'返回的值。也許:'bool dispMessage(void){..//如果你想再次顯示這個返回true;如果不返回false。}和你的main中:'while(dispMessage(){})'或類似的東西應該給出與再次調用int main() – Matthias 2014-12-02 13:05:35

回答

1

在C++中,它是非法爲一個程序本身調用main,所以簡單的答案是你不要。您需要重構代碼,最簡單的轉換是在main中編寫一個循環,但其他替代方案可能包括將main中的邏輯分解爲不同的函數,該函數在頭中聲明並可以調用。

+0

爲什麼叫main是非法的? – davidpox 2014-12-02 13:23:21

+0

@davidpox:我不確定,但是我認爲*的動機是釋放實現以在'main'函數中執行額外的,隱藏的事情,該函數設置並取消C++運行時,同時保留'main'爲操作系統調用來啓動程序的外部入口點。可能的實現可以做到這一點,並仍然確保'main'也可以在程序內部調用,而不需要再次執行額外的東西,但標準通常會在實現方便的時候降低。簡短的回答是,「因爲標準這麼說」。 – 2014-12-02 13:55:55

4

您不需要將dispMessage的返回值更改爲int或類似的值,從main檢查返回碼,並根據該值執行不同的操作。

+0

但我該如何執行所有的主?說如果我在我的主體中有一個'cout'聲明,我怎麼能這麼做,以便在用戶決定從一個單獨的類再次運行程序之後打印它? – davidpox 2014-12-02 13:57:08

0

也許這樣的事情:

bool dispMessage(void) 
{ 
    cout << "This is my message" << endl; 
    // call me again 
    return true; 

    // do not call me again 
    return false; 
} 

,並在int main()

int main() 
{ 
    Message DisplayMessage; 
    while(DisplayMessage.dispMessage()) 
    { 

    } 
    return 0; 
} 
0

假設你可以改變dispMessage(無效),以類似布爾askForReturnToStart(),那麼你可以用它來在主要內部建立一個循環,fe:

int main() { 
    Message dm; 
    do { 
    // whatever 
    } while (dm.askForReturnToStart()); 
} 
3

main是特殊的,你不允許在C++中調用它。

因此,「明顯」的事情做的是一切都移動到另一個功能:

int my_main() 
{ 
    Message DisplayMessage; 
    DisplayMessage.dispMessage(); 
    return 0; 
} 

int main() 
{ 
    return my_main(); 
} 

現在,您可以撥打my_main從任何你喜歡的(只要你聲明它首先在您需要的翻譯單元當然可以從中調用它)。

我不確定這是否能真正解決您的問題,但它儘可能接近再次撥打main

如果您從程序的其他位置調用my_main,那麼您將不會完全「返回到開始」,您將在未完成舊代碼的情況下開始新的代碼運行。通常要「回到開始」你想要一個循環的東西。但這取決於你。只是不要哭泣給我們,如果你遞減了很多次,你用完堆棧空間;-)

+0

至今爲止,感謝!但是,我怎麼從一個單獨的cpp文件中調用這個my_main()呢? – davidpox 2014-12-02 14:12:16

+1

@davidpox:請參閱您的C++教科書或教程,瞭解如何在文件中組織函數並調用它們。評論可能不足以解釋你需要知道的一切。你需要的聲明是'int my_main();' – 2014-12-02 14:17:05

相關問題