我试图弄清楚为什么这不起作用。我想在Java中做,其中main是类中的静态函数,但这会产生未解析的外部符号错误:
static class MainClass
{
public:
static int _tmain(int argc, char* argv[])
{
return 0;
}
};
为什么这不起作用?
由于
答案 0 :(得分:10)
C ++不能那样工作。
你需要main作为一个函数:
int main(int argc,char* argv[])
{
//STUFF
}
答案 1 :(得分:6)
由于_tmain
在其中包含类名MainClass
的二进制文件中被破坏,因此多个类可能在其中包含函数_tmain
而不会发生冲突。它没有像::_tmain
那样具有相同的错位名称。
我记得在早期版本的MSVC中,它接受了以下内容而没有链接器错误,该错误由于我的代码库中的宏扩展而意外结束
namespace bar {
int main() { }
}
它显然特别对待main
这个名称,并没有将其破坏或与::main
相同。但是这样的事情并不符合标准。就像在类的情况一样,这样的函数与主函数完全无关。
答案 2 :(得分:1)
_tmain。您需要在链接器中设置另一个函数的入口点,该函数将调用MainClass :: _ tmain。
答案 3 :(得分:1)
因为在C ++中,你不能在一个类中放入一个入口点。 This answer可能有帮助。
答案 4 :(得分:1)
为什么不起作用?因为它不是C ++。
struct MainClass {
static int main(int argc, char** argv) {
return 0;
}
};
int main(int argc, char** argv) {
return MainClass::main(argc, argv);
}
答案 5 :(得分:0)
它不是真正的C ++,而是标准链接器进程正在寻找特定名称的导出(具有C风格的链接)。特定导出因编译器和可执行文件类型而异,但格式特定于每种类型。例如,Windows GUI exe具有与控制台不同的入口点,并且特定于ASCII或UNICODE。但是链接器总是在寻找具有特定链接名称的函数,这就是静态成员无法工作的原因。
答案 6 :(得分:0)
您始终需要将main()
定义为全局函数。这是程序始终以C ++开头的地方。你可以简单地从main调用你的静态类函数,如果你真的想要传递变量:
class MainClass
{
public:
static int _tmain(int argc, char* argv[])
{
return 0;
}
};
int main(int argc, char* argv[]) {
return MainClass::_tmain(argc, argv);
}