2011-04-13 105 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