2014-12-02 32 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

相关问题