2011-04-13 141 views
6

我添加了一个类IcecastServer到我的QT项目中,将头文件添加到pro文件并添加了一些代码。每次我编译出现以下错误:QT未定义的参考错误,当试图编译

发布/ icecastserver.o:icecastserver.cpp :(文字+ 0x39):未定义参考_imp___ZN10QTcpServerC1EP7QObject' release/icecastserver.o:icecastserver.cpp:(.text+0x50): undefined reference to小鬼ZN12QHostAddressC1ENS_14SpecialAddressE” 发布/ icecastserver.o:icecastserver 。的.cpp :(文本+ 0x68)中:未定义参照_imp___ZN10QTcpServer6listenERK12QHostAddresst' release/icecastserver.o:icecastserver.cpp:(.text+0x73): undefined reference to _imp _ZN12QHostAddressD1Ev ' 释放/ icecastserver.o:icecastserver.cpp :(文本+ 0x9d):未定义参照_imp___ZNK10QTcpServer11errorStringEv' release/icecastserver.o:icecastserver.cpp:(.text+0x3d4): undefined reference to小鬼ZN12QHostAddressD1Ev' 释放/ icecastserver的.o:icecastse 。rver.cpp :(文本+ 0x4bd):未定义参照_imp___ZN10QTcpServerC1EP7QObject' release/icecastserver.o:icecastserver.cpp:(.text+0x4d4): undefined reference to _imp _ZN12QHostAddressC1ENS_14SpecialAddressE ' 释放/ icecastserver.o:icecastserver.cpp :(文本+ 0x4ec):未定义参照_imp___ZN10QTcpServer6listenERK12QHostAddresst' release/icecastserver.o:icecastserver.cpp:(.text+0x4f7): undefined reference to小鬼ZN12QHostAddressD1Ev' 释放/ icecastserver.o:icecastserver.cpp :(文字+ 0x521):未定义参考_imp___ZNK10QTcpServer11errorStringEv' release/icecastserver.o:icecastserver.cpp:(.text+0x858): undefined reference to _imp _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 

这是源文件:

#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; 
    } 

} 

回答

7

首先,您需要#include <QHostAddress>某处,假设注释掉的行是造成问题的原因。

你也可以检查一些项目设置,看看你是否有所有正确的输入。

编辑:更多细节

QtNetwork需要QT网络lib输入。

QT += network

然后确保你包括了正确的头:再次表明你正在使用QtCreator作为被提供那么这意味着在你的.pro文件,你需要有像这样的线路不是很多信息假设在使用它们之前使用的对象。如果你仍然得到未定义的参考,链接错误等尝试QMake和重建。如果它仍然存在,那么除了QT使用错误之外,您的代码中可能还有错误,并应验证正在使用的方法和对象是否已正确声明。

最后编辑:高兴的是,工作...

当您在QTCreator一个新项目出现在向导,您可以检查出要包括这将增加这些不同的Qt库的一个步骤。专业线和投入为您服务。这是输入额外的lib文件的QT版本,默认情况下它们会静态链接,我相信。如果你想动态链接共享对象或DLL然后有一些额外的配置步骤。

+0

我补充说,包括但如你所说,它的评论,所以没有解决问题。 你在说什么? – Hedge 2011-04-13 23:33:45

+1

耶!将网络添加到专业文件解决了问题。对于'QT + = network', – Hedge 2011-04-13 23:43:30

+0

可以在https://doc.qt.io/qt-4.8/qmake-variable-reference.html#qt找到该参考文献 – n611x007 2017-03-22 09:40:56

1

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

+0

我正在使用Qt Creator。我所做的是执行qmake然后运行程序。 – Hedge 2011-04-13 23:25:41

+1

@Hedge QMake运行moc(元对象编译器)工具,以便在运行默认行为的可执行文件之前,假设您有QtCreator安装程序来构建过时的源代码。您通常只需在更改或添加'Q_OBJECT'的东西时执行此操作。 – AJG85 2011-04-13 23:45:56

+0

谢谢你的教育。我会记住这一点。 – Hedge 2011-04-13 23:47:57