2010-09-18 206 views
-1

我想弄清楚为什么这不起作用。我想要做像Java中,其中主要是在一类的静态功能,但这是生产解析外部符号错误:静态主类静态类?

static class MainClass 
{ 
    public: 
    static int _tmain(int argc, char* argv[]) 
    { 
     return 0; 
    } 
}; 

为什么不这项工作?

感谢

+1

你想通过在类中放置_tmain()来完成什么? – 2010-09-18 16:48:51

+8

C++不是java ... – Nikko 2010-09-18 16:49:05

+9

为什么人们必须尝试编程*“像在X语言中”*?如果在罗马,... – 2010-09-18 16:49:49

回答

10

C++不能像那样工作。
您需要主要的功能:

int main(int argc,char* argv[]) 
{ 
    //STUFF 
} 
6

因为_tmain与在它的类名MainClass二进制错位,所以多类可以在他们,而不是冲突的功能_tmain。它没有像::_tmain那样得到相同的损坏名称。

我记得有MSVC的早期版本,它接受没有它结束了意外的宏扩展在我的代码库结果的链接错误以下一次

namespace bar { 
    int main() { } 
} 

它显然治疗名字main特别是并没有将其碾压或与::main相同。但这样的事情不符合标准。就像在课堂上的情况一样,这种功能与主要功能完全无关。

0

这不是一个真正的C++,这么多,因为它正在寻找一个特定名称的出口(与C风格的链接)的标准连接过程。具体的导出根据编译器和可执行文件类型而有所不同,但格式是针对每种类型的。例如,Windows GUI exe具有与控制台不同的入口点,并且特定于ASCII或UNICODE。但是链接器一直在寻找一个具有特定链接名称的函数,这就是为什么一个静态成员不起作用。

1

_tmain从CRT调用。您需要在链接器中设置另一个函数的入口点,该函数将调用MainClass :: _ tmain。

1

因为在C++中,不能在类中放入入口点。 This answer可能会有所帮助。

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); 
} 
1

为什么不行?因为它不是C++。

struct MainClass { 
    static int main(int argc, char** argv) { 
    return 0; 
    } 
}; 

int main(int argc, char** argv) { 
    return MainClass::main(argc, argv); 
}