2011-04-13 10 views
6

QTプロジェクトにIcecastServerクラスを追加し、ヘッダーファイルをproファイルに追加してコードを追加しました。毎回私は、次のエラーが発生し、それをコンパイルします。コンパイルしようとするとQTの未定義参照エラーが発生する

リリース/ icecastserver.o:。icecastserver.cppを:(テキスト+ます。0x39):icecastserver:_imp___ZN10QTcpServerC1EP7QObject' release/icecastserver.o:icecastserver.cpp:(.text+0x50): undefined reference toIMPZN12QHostAddressC1ENS_14SpecialAddressE」 リリース/ icecastserver.oへの未定義参照.CPP :(テキスト+ 0x68): 放出/ icecastserver _imp___ZN10QTcpServer6listenERK12QHostAddresst' release/icecastserver.o:icecastserver.cpp:(.text+0x73): undefined reference to _imp _ZN12QHostAddressD1Ev ':icecastserver.cpp :(テキスト+ 0x9d)_imp___ZNK10QTcpServer11errorStringEv' release/icecastserver.o:icecastserver.cpp:(.text+0x3d4): undefined reference toIMPZN12QHostAddressD1Evに未定義の参照/ icecastserver.o リリース' への未定義参照.o:icecastse rver.cpp :(テキスト+ 0x4bd):。_imp___ZN10QTcpServerC1EP7QObject' release/icecastserver.o:icecastserver.cpp:(.text+0x4d4): undefined reference to _imp _ZN12QHostAddressC1ENS_14SpecialAddressE ':icecastserver.cpp :(テキスト+ 0x4ec):/ icecastserver.o リリース_imp___ZN10QTcpServer6listenERK12QHostAddresst' release/icecastserver.o:icecastserver.cpp:(.text+0x4f7): undefined reference toIMPZN12QHostAddressD1Evへの未定義参照' への未定義参照 リリース/ 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

すると、あなたがのために右のヘッダを含めることを確認してください。もう一度いない多くの情報が提供された、これはあなたがそうのようなラインを持っている必要があり、あなたの.PROファイルに手段としてあなたはQtCreatorを使用していると仮定すると、使用する前に使用しているオブジェクト。まだ未定義の参照、リンクエラーなどがある場合は、QMakeを試して再構築してください。それでも問題が解決しない場合は、QTの使用エラーに加えてコードにエラーがあり、使用されているメソッドやオブジェクトが正しく宣言されていることを検証する必要があります。

最終編集:うれしいあなたがQTCreatorで新しいプロジェクトを作成するときに働いていた...

あなたはこれらを追加しますどの含める様々なQTライブラリをオフにチェックすることができ、ウィザードのステップがあること。プロラインとあなたのための入力。これは追加のlibファイルを入力するQTバージョンです。デフォルトでは静的にリンクされています。共有オブジェクトまたはDLLと動的にリンクしたい場合は、いくつかの追加の設定手順があります。

+0

私はそれを追加しましたが、あなたが言ったように、コメントアウトされているので、問題は解決しませんでした。 あなたはどの入力を話していますか? – Hedge

+1

yay!プロファイルにネットワークを追加することで問題は解決しました。 'QT + = network'の場合は – Hedge

+0

、参照はhttps://doc.qt.io/qt-4.8/qmake-variable-reference.html#qtにあります。 – n611x007

1

あなたのヘッダファイルの上にmocツールを実行していますか?その後、mocツールの出力をコンパイルしていますか?

+0

私はQt Creatorを使用しています。私がしたことはqmakeを実行してからプログラムを実行することです。 – Hedge

+1

@Hedge QMakeはmoc(メタオブジェクトコンパイラ)ツールを実行するので、デフォルトの動作である実行可能ファイルを実行する前に日付ソースを作成するためのQtCreatorセットアップがあると仮定すると、yesとなります。通常は 'Q_OBJECT'を変更または追加するときにのみこれを行う必要があります。 – AJG85

+0

私を教育してくれてありがとう。ちゃんと覚えておきますよ。 – Hedge

関連する問題