任何人都可以告诉我,为什么我不能在Qt程序中使用普通的C ++类。如果有任何类没有从QObject继承,编译器会给我一个名为
的链接错误error LNK2019: unresolved external symbol _main referenced in function _WinMain@16
我正在使用Qt 4.5.2(由我自己编译)和vs2005。请帮我解决这个问题!
编辑:
示例...
// UnitManager.h
class UnitManager
{
public:
//-Some code
};
// CivilizationViewer.h
class CivilizationViewer : public QMainWindow
{
Q_OBJECT
//-some code
};
//主
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
CivilizationViewer w;
w.show();
return a.exec();
}
如果我在CivilizationViewer.h中包含UnitManager.h,编译器会给我这个错误。 (虽然我在main.cpp编译器中包含UnitManager.h但会给我错误)
答案 0 :(得分:8)
您提供的错误与您正在使用的类没有任何关系。它看起来与您为应用程序设置的入口点有关。通常你想在Qt程序中使用main()而不是WinMain()。确保您的配置设置正确。
您在问题中包含了一些代码。这是全部吗?如果是这样,你就错过了一个主要功能。
答案 1 :(得分:1)
谢谢大家。我发现了错误。 UnitManager.h中有SDL.h,所以我必须添加SDL.lib和SDLmain.lib(它是正确的,对吗?)然后在SDLmain.lib中有另一个main定义。因此,主要定义之间存在一个共同点。因此我在添加qtmaind.lib之前添加了SDLmain.lib。然后通过仅发出一个名为
的警告来解决问题warning LNK4098: defaultlib 'msvcrt.lib' conflicts with use of other libs; use /NODEFAULTLIB:library
那警告是什么?我可以忽略警告,但我想知道它!感谢
答案 2 :(得分:0)
您似乎需要链接qtmain.lib(qtmaind.lib用于调试版本)。 该库提供了WinMain函数,如果您声明/ subsystem:windows。
,则需要该函数来源:http://lists.trolltech.com/qt-interest/2005-12/thread00170-0.html
答案 3 :(得分:0)
看起来你没有正确地包含QT库......(实际的.lib文件)
答案 4 :(得分:0)
我认为你实际上是一个win32应用程序。 尝试替换你的主要:
int _tmain(int argc, _TCHAR* argv[]){
your code
}
看到你的错误信息,我不会猜测Qt是你的问题。 您是否安装了Visual Studio Qt集成?试一试,制作一个新的Qt项目。