在类中定义main函数
Define main function in class
我想知道是否有可能在类中定义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:函数' _start': collect2: error: ld exit with status 1
这听起来像是没有定义的main()
错误。
struct runtime_entry_point
{
friend int main()
{
}
};
int main(){}
现在编译失败了,因为int main()
已经在结构体runtime_entry_point
中定义了!这里发生了什么?
通常不可能将main
写入类/结构体的一部分。默认情况下,链接器搜索一个免费的main
方法并针对它进行链接,使其成为入口点。您可以在链接器级别更改此行为,在这种情况下,main
必须是类/结构中的静态方法。但这是依赖于链接器实现的,不可移植的,而且很危险。
然而,在你提到的第二种情况下,是违反一个定义规则的结果。您在一个翻译单元中定义了一个名称(main()
)不止一次。
Аccording对于cppreference.com上的文章,采用以下结构:
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;
}
相关文章:
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- "main"函数堆栈中的对象在第一个任务运行时被覆盖 (FreeRTOS)
- 为什么 'main' 函数中的局部 int 变量会自动初始化?
- 为什么在我的 main 函数中声明整数后我的整数数组中会出现错误?
- 尝试更改 main 函数内的全局变量值时出现编译错误 C++.
- 我应该在 main 函数中写什么来测试我的问题?
- 如何在 main 函数中输出两个新字符串C++?
- 有没有办法通过 main 函数访问受保护的矢量大小而无需将其转换为公共?
- 我们可以在main函数中声明嵌套类对象吗
- 为什么Main函数上的Sleep()会停止所有线程
- C++ main 函数中初始化静态变量
- 为什么VC++/MFC没有main函数?
- 如何在 main 函数的一个对象中初始化两个类的值?C++
- 在 C++ 中解析 main 函数的大量输入的正确方法是什么
- 如何编写一个 void 函数,该函数将在数组中搜索值,并通过引用将该值的位置传递回 main 函数
- 如何将矩阵参数发送到从C 中的MAIN函数
- 如何从子例程函数获取到 main 函数的返回值
- 为什么我不能在 main 函数中更改类的公共变量
- C++编译错误:多个定义"main",但项目中只有一个 main 函数
- 如何使用 x86 程序集在 c 中访问 main 函数中的变量