C++ 尝试编译时出现QT未定义引用错误

C++ 尝试编译时出现QT未定义引用错误,c++,qt,linker,header-files,C++,Qt,Linker,Header Files,我在QT项目中添加了一个类IcecastServer,在pro文件中添加了头文件,并添加了一些代码。每次编译时,都会出现以下错误: release/icecastserver.o:icecastserver.cpp:(.text+0x39):未定义对\u imp\u\u ZN10QTcpServerC1EP7QObject'的引用 release/icecastserver.o:icecastserver.cpp:(.text+0x50):未定义对impZN12QHostAddressC1ENS

我在QT项目中添加了一个类IcecastServer,在pro文件中添加了头文件,并添加了一些代码。每次编译时,都会出现以下错误:

release/icecastserver.o:icecastserver.cpp:(.text+0x39):未定义对
\u imp\u\u ZN10QTcpServerC1EP7QObject'的引用
release/icecastserver.o:icecastserver.cpp:(.text+0x50):未定义对
impZN12QHostAddressC1ENS\u 14specialaddress' release/icecastserver.o:icecastserver.cpp:(.text+0x68):未定义对
\u imp\uuuuuuuzn10qtcpserver6Listenerk12qhostAddresst'的引用
release/icecastserver.o:icecastserver.cpp:(.text+0x73):未定义对
\u imp
\u ZN12QHostAddressD1Ev'的引用 release/icecastserver.o:icecastserver.cpp:(.text+0x9d):未定义对
\u imp\uuuuuuznk10qtcpserver11errorstringev'的引用
release/icecastserver.o:icecastserver.cpp:(.text+0x3d4):未定义对
impZN12QHostAddressD1Ev'的引用 release/icecastserver.o:icecastserver.cpp:(.text+0x4bd):未定义对
\u imp\u\u ZN10QTcpServerC1EP7QObject'的引用
release/icecastserver.o:icecastserver.cpp:(.text+0x4d4):未定义的引用
release/icecastserver.o:icecastserver.cpp:(.text+0x4ec):未定义对
的引用
release/icecastserver.o:icecastserver.cpp:(.text+0x4f7):未定义对
impZN12QHostAddressD1Ev'的引用 release/icecastserver.o:icecastserver.cpp:(.text+0x521):未定义对
\u imp\uuuuuuznk10qtcpserver11errorstringev'的引用
release/icecastserver.o:icecastserver.cpp:(.text+0x858):未定义对
\u imp
\u ZN12QHostAddressD1Ev'的引用

我做错了什么?

这是头文件:

#ifndef ICECASTSERVER_H
#define ICECASTSERVER_H

#include <QObject>

QT_BEGIN_NAMESPACE
class QTcpServer;
QT_END_NAMESPACE

class IcecastServer : public QObject
{
    Q_OBJECT
public:
    explicit IcecastServer(QObject *parent = 0);

signals:

public slots:

private:
    QTcpServer *tcpServer;
};

#endif // ICECASTSERVER_H
\ifndef icecast服务器\u H
#定义ICECASTSERVER\u H
#包括
QT_开始名称空间
类qtcserver;
QT_END_名称空间
类IcecastServer:公共QObject
{
Q_对象
公众:
显式IcecastServer(QObject*parent=0);
信号:
公众时段:
私人:
qtcserver*tcpServer;
};
#endif//ICECASTSERVER\u H
这是源文件:

#include "icecastserver.h"
#include "QDebug"
#include <QtNetwork/QTcpServer>
#include <QtGui>

IcecastServer::IcecastServer(QObject *parent) :
    QObject(parent)
{

    tcpServer = new QTcpServer(this);
    //tcpServer->listen(QHostAddress::Any,8000);

    if (!tcpServer->listen()){
        QMessageBox::critical(NULL, tr("Fortune Server"), tr("Unable to start the server: %1.").arg(tcpServer->errorString()));

         return;
    }

}
#包括“icecastserver.h”
#包括“QDebug”
#包括
#包括
IcecastServer::IcecastServer(QObject*parent):
QObject(父对象)
{
tcpServer=新的QTcServer(此);
//tcpServer->listen(QHostAddress::Any,8000);
如果(!tcpServer->listen()){
QMessageBox::critical(NULL,tr(“财富服务器”)、tr(“无法启动服务器:%1”).arg(tcpServer->errorString());
返回;
}
}

您是否在头文件上运行
moc
工具?您随后是否从
moc
工具编译输出?

首先,您需要
#在某个地方包含
,假设注释掉的行是导致问题的原因

您可能还需要检查一些项目设置,以查看是否有所有正确的输入

编辑:更多细节

QtNetwork需要QT网络库输入。再次假设您正在使用QtCreator,因为没有提供太多信息,这意味着在.pro文件中,您需要这样一行:

QT+=网络

然后确保在使用对象之前包含正确的标题。如果仍然存在未定义的引用、链接错误等,请尝试
QMake
并重新生成。如果它仍然存在,那么除了QT使用错误之外,代码中可能还有错误,并且应该验证正在使用的方法和对象是否正确声明

最后的编辑:很高兴这起作用了


当您在QTCreator中创建一个新项目时,向导中有一个步骤,您可以勾选要包含的各种QT库,这些库将为您添加这些.pro行和输入。这是QT版本的输入额外的lib文件,默认情况下,它们将静态链接,我相信。如果要动态链接共享对象或dll,则需要执行一些额外的配置步骤。

我正在使用Qt Creator。我所做的是执行qmake,然后运行程序。@Hedge qmake运行moc(元对象编译器)工具,因此如果您在运行可执行文件(默认行为)之前安装了QtCreator以生成过期的源,那么这将是肯定的。通常,你只需要在更改或添加
Q_OBJECT
内容时执行此操作。我添加了include,但正如你所说,它被注释掉了,因此无法解决问题。您在谈论哪些输入?有关
QT+=network
的参考,请访问