C++ 在类中定义主函数

C++ 在类中定义主函数,c++,main,friend,C++,Main,Friend,我想知道是否可以在类中定义main(),例如: struct runtime_entry_point { friend int main() { } }; 我已经测试过了,但它不起作用(几乎在GCC 4.8.2中): g++-o dist/Release/GNU-Linux-x86/turbo build/Release/GNU-Linux-x86/main.o /usr/lib/gcc/x86_64-unknown-linux-gnu/4.8.2/../../../

我想知道是否可以在类中定义
main()
,例如:

struct runtime_entry_point
{
    friend int main()
    {

    }
};
我已经测试过了,但它不起作用(几乎在GCC 4.8.2中):

g++-o dist/Release/GNU-Linux-x86/turbo build/Release/GNU-Linux-x86/main.o /usr/lib/gcc/x86_64-unknown-linux-gnu/4.8.2/../../../../../../../../lib/crt1.o: 在函数“u start”中:collect2:错误:ld已退出,状态为1

这听起来像是一个没有定义的
main()
error

后来,我用经典的方式写了main:

struct runtime_entry_point
{
    friend int main()
    {

    }
};

int main(){}

现在编译失败了,因为已在结构
运行时入口点
中定义了
int main()
这里发生了什么?

简单地说,作为类/结构的一部分编写
main
是不可能的。默认情况下,链接器搜索一个免费的
main
方法并对其进行链接,使其成为入口点。您可以在链接器级别更改此行为,在这种情况下,
main
必须是class/struct中的static方法。但这是依赖于链接器实现的,不是可移植的和危险的

但是,在第二种情况下,您提到的是由于违反了。您在单个翻译单元中多次定义名称(
main()

struct runtime_entry_point
{
    friend int main()
    {
    }
};
定义一个非成员函数,同时使其成为此类的朋友。这样的非成员函数总是内联的


链接器在对象文件(内联函数)中找不到main(),并且您不能在同一转换单元中声明另一个main()。

您不能两次定义一个函数,当您将定义更改为类/结构内的声明时,它会起作用:

#include <iostream>

struct runtime_entry_point
{
    friend int main();
};

int main()
{
    std::cout << "Hello, world!" << std::endl;
}
#包括
结构运行时\u入口\u点
{
friend int main();
};
int main()
{

std::cout无论你在做什么:都不要做。@MilesRout我只是出于好奇。但是如果你不想了解上下文,我正在做模板元编程,我正在寻找一种方法来自动生成
main()
,这在tmp元程序中通常不起任何作用。请所有人注意:我不是在问是否定义
main()
在结构中是否是一种好的做法,我想问一下上述情况的原因(
main()
未定义与结构中以前的定义相比)有一种方法,移植到java。你可以找到昨天的讨论,关于代码>主< /代码>,这是它对iOCPPP的最近的问题的选择。如果你读了Jefffrey的答案的注释,就可以彻底解释C++的内在相关,但是我想你已经知道了这个帖子。