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++的内在相关,但是我想你已经知道了这个帖子。