2011-04-13 2 views
6

Ho aggiunto una classe IcecastServer al mio progetto QT, aggiunto il file di intestazione al file pro e aggiunto del codice. Ogni volta che compilo si verificano i seguenti errori:QT errori di riferimento non definiti durante il tentativo di compilare

rilascio/icecastserver.o:. Icecastserver.cpp :(testo + 0x39): undefined reference to _imp___ZN10QTcpServerC1EP7QObject' release/icecastserver.o:icecastserver.cpp:(.text+0x50): undefined reference toimpZN12QHostAddressC1ENS_14SpecialAddressE' rilascio/icecastserver.o: icecastserver . cpp :(testo + 0x68): undefined reference to _imp___ZN10QTcpServer6listenERK12QHostAddresst' release/icecastserver.o:icecastserver.cpp:(.text+0x73): undefined reference to _imp _ZN12QHostAddressD1Ev ' rilascio/icecastserver.o: icecastserver.cpp :(testo + 0x9d):. undefined reference to _imp___ZNK10QTcpServer11errorStringEv' release/icecastserver.o:icecastserver.cpp:(.text+0x3d4): undefined reference toimpZN12QHostAddressD1Ev' rilascio/icecastserver .o: icecastse . Rver.cpp :(testo + 0x4bd): undefined reference to _imp___ZN10QTcpServerC1EP7QObject' release/icecastserver.o:icecastserver.cpp:(.text+0x4d4): undefined reference to _imp _ZN12QHostAddressC1ENS_14SpecialAddressE ' rilascio/icecastserver.o: icecastserver.cpp :(testo + 0x4ec):. Undefined reference to _imp___ZN10QTcpServer6listenERK12QHostAddresst' release/icecastserver.o:icecastserver.cpp:(.text+0x4f7): undefined reference toimpZN12QHostAddressD1Ev' stampa/icecastserver.o: icecastserver.cpp :(testo + 0x521):. undefined reference to _imp___ZNK10QTcpServer11errorStringEv' release/icecastserver.o:icecastserver.cpp:(.text+0x858): undefined reference to _imp _ZN12QHostAddressD1Ev'

che cosa sto facendo di sbagliato?

Questo è il file di intestazione:

#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 

Questa è la fonte file:

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

} 

risposta

7

Per prima cosa è necessario il numero #include <QHostAddress> da qualche parte supponendo che la linea commentata sia ciò che ha causato il problema.

È anche possibile controllare alcune impostazioni di progetto per vedere se si dispone di tutti gli ingressi corretti.

Edit: Più particolare

QtNetwork richiede ingressi lib rete QT. Supponendo ancora una volta che si utilizza QtCreator come non molto è stato fornito informazioni allora questo significa che nel file .pro è necessario disporre di una linea in questo modo:

QT += network

Quindi assicuratevi di includere le intestazioni giusti per il oggetti che stai usando prima di usarli. Se ottieni ancora riferimenti non definiti, errori di collegamento, ecc. Prova uno QMake e ricostruisci. Se persiste, probabilmente hai errori nel codice oltre agli errori di utilizzo del QT e dovresti verificare che i metodi e gli oggetti utilizzati siano stati dichiarati correttamente.

finale Edit: Sono contento che ha funzionato ...

Quando si crea un nuovo progetto in QtCreator v'è un passo nella procedura guidata in cui è possibile spuntare le varie librerie QT si desidera includere che aggiungerà questi. linee pro e input per te. Questa è la versione QT di inserire altri file lib e per impostazione predefinita saranno linkati staticamente credo.Se si desidera creare un collegamento dinamico con oggetti condivisi o dll, sono disponibili alcuni passaggi di configurazione aggiuntivi.

+0

Ho aggiunto che include ma come hai detto, è stato commentato, in modo che non risolvesse il problema. Di quali input stai parlando? – Hedge

+1

yay! L'aggiunta di una rete al pro-file ha risolto il problema. – Hedge

+0

per 'QT + = rete' il riferimento può essere trovato su https://doc.qt.io/qt-4.8/qmake-variable-reference.html#qt – n611x007

1

Stai usando lo strumento moc sopra il vostro file di intestazione? Stai successivamente compilando l'output dallo strumento moc?

+0

Sto usando il Creatore Qt. Quello che ho fatto è l'esecuzione di qmake e quindi l'esecuzione del programma. – Hedge

+1

@Hedge QMake esegue lo strumento moc (meta object compiler) in modo tale che sia un sì presumendo di avere l'installazione di QtCreator per creare origini obsolete prima dell'esecuzione dell'eseguibile, che è il comportamento predefinito. Hai solo bisogno di farlo quando cambi o aggiungi cose 'Q_OBJECT' di solito. – AJG85

+0

Grazie per avermi istruito. Lo terro 'a mente. – Hedge