如何在C++中的类中实现main方法?

jac*_*kie 6 c++

static class EntranceClass {
public:
    static void RegisterSomething()
    {
    }

    static int main()
    {
        RegisterSomething();
        return 0;
    }
} // <-expected unqualified-id at end 
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:输入main.cpp结束时预期的nonqualified-id问题

有什么解决方案吗?

Ara*_*raK 23

main只是main简单!功能:

class EntranceClass
{
...
}; //<-- note the semicolon

int main()
{

}
Run Code Online (Sandbox Code Playgroud)

  • 值得强调的是,在类声明结束时需要使用分号. (8认同)

Cat*_*lus 9

错误是指static在类定义之前使用关键字 - 编译器在此之后需要一个变量名(因为在C++中没有这样的东西static class).

如果你想static int EntranceMain::main(void)用作程序的入口点,那么一种方法就是告诉你的链接器,即给它一个完整的装饰名称.这在很大程度上取决于您使用的编译器和链接器,因此您需要参考其文档.但使用它可能意味着您需要包含启动代码(例如CRT初始化).

但请注意,这不符合标准.

  • 你没有告诉链接器.你在全球范围内做的是"int main(){return EntranceMain :: main();}".否则,你正在编写一个不可移植的hack(它可能会随着对实现的任何改变而消失)而不是C++. (6认同)

Dav*_*ley 9

根据标准,你不是在写一个真正的main功能.

第3.6.1节,第3段:"功能main.不得在程序中被使用(3.2)连接(3.5)的main.是实现定义声明的程序maininlinestatic.是形成不良的名称main是没有另外保留.[ 示例: 可以调用成员函数,类和枚举main,其他名称空间中的实体也可以调用.]"

这意味着,通过声明成员函数main,您只是声明一个成员函数.它没有特别的意义,并不意味着课堂上的任何东西都可以独立调用.如果您替换snicklefrazz该函数名称和所有引用,该程序将完全相同.

在风格上,snicklefrazz会更好,因为它不会导致标准main功能的任何可能的结论.

第3.6.1节第1段:"程序应包含一个名为的全局函数main,它是程序的指定开始.它是实现定义的,是否需要在独立环境中的程序来定义main函数."

这意味着,除非您正在编写标准称为独立环境(通常用于编写嵌入式系统)的内容,否则您需要定义一个main全局函数,这就是程序启动的地方.

在Java中,类可以有一个main方法,该方法是在调用类时程序开始的位置.在C++中并非如此,并且无法直接实现此目的.

(并且,正如其他人所提到的,a class不可能static,并且类定义以分号结尾.)


RED*_*AIR 7

你是否忘记了关闭之后的分号?