为什么我不能在Qt中使用普通的C ++类

时间:2009-08-14 19:13:30

标签: c++ qt

任何人都可以告诉我,为什么我不能在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但会给我错误)

5 个答案:

答案 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项目。