2011-04-13 16 views
6

Agregué una clase IcecastServer a mi proyecto QT, agregué el archivo de encabezado al archivo pro y agregué un código. Cada vez que compilo los errores siguientes:QT Errores de referencia no definidos al intentar compilar

liberación/icecastserver.o:. Icecastserver.cpp :(texto + 0x39): referencia indefinida a _imp___ZN10QTcpServerC1EP7QObject' release/icecastserver.o:icecastserver.cpp:(.text+0x50): undefined reference toimp liberación ZN12QHostAddressC1ENS_14SpecialAddressE'/ icecastserver.o: icecastserver . .cpp :(texto + 0x68): referencia indefinida a _imp___ZN10QTcpServer6listenERK12QHostAddresst' release/icecastserver.o:icecastserver.cpp:(.text+0x73): undefined reference to _mej _ZN12QHostAddressD1Ev ' liberación/icecastserver.o: icecastserver.cpp :(texto + 0x9d):. referencia indefinida a _imp___ZNK10QTcpServer11errorStringEv' release/icecastserver.o:icecastserver.cpp:(.text+0x3d4): undefined reference toimpZN12QHostAddressD1Ev' liberación/icecastserver .o: icecastse . Rver.cpp :(texto + 0x4bd): referencia indefinida a _imp___ZN10QTcpServerC1EP7QObject' release/icecastserver.o:icecastserver.cpp:(.text+0x4d4): undefined reference to _mej _ZN12QHostAddressC1ENS_14SpecialAddressE ' liberación/icecastserver.o: icecastserver.cpp :(texto + 0x4ec):. Referencia indefinida a _imp___ZN10QTcpServer6listenERK12QHostAddresst' release/icecastserver.o:icecastserver.cpp:(.text+0x4f7): undefined reference toimpZN12QHostAddressD1Ev' liberación /icecastserver.o: icecastserver.cpp :(texto + 0x521):. _imp___ZNK10QTcpServer11errorStringEv' release/icecastserver.o:icecastserver.cpp:(.text+0x858): undefined reference to referencia indefinida a _mej _ZN12QHostAddressD1Ev'

¿Qué estoy haciendo mal?

Esta es la cabecera de archivo:

#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 

Ésta es la fuente de archivo:

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

} 

Respuesta

7

Primero necesita #include <QHostAddress> en algún lugar suponiendo que la línea comentada es la causa del problema.

También puede verificar algunas configuraciones de proyecto para ver si tiene todas las entradas correctas.

Editar: más información

QtNetwork requiere insumos lib red QT. Suponiendo una vez más que está utilizando QtCreator como se proporcionó información no mucho entonces esto significa en su archivo .pro es necesario tener una línea así:

QT += network

A continuación, asegúrese de incluir las cabeceras adecuadas para el objetos que está utilizando antes de usarlos. Si aún obtiene referencias no definidas, errores de vinculación, etc. intente con QMake y recupérelo. Si aún persiste, probablemente tenga errores en su código además de los errores de uso de QT y debería validar que sus métodos y objetos utilizados se declararon correctamente.

edición final: Glad que funcionaba ...

Cuando se crea un nuevo proyecto en QtCreator hay un paso del asistente donde se puede comprobar fuera de las diversas librerías QT que desee incluir que se sumarán estos. líneas pro y entradas para ti. Esta es la versión QT de entrada de archivos lib adicionales y, por defecto, estarán vinculados estáticamente, creo.Si desea vincular dinámicamente con objetos compartidos o DLL, hay algunos pasos de configuración adicionales.

+0

Agregué que incluir pero como dijiste, está comentado, por lo que no solucionó el problema. ¿De qué entradas está hablando? – Hedge

+1

yay! Agregar red al archivo pro resolvió el problema. – Hedge

+0

para 'QT + = network', la referencia se puede encontrar en https://doc.qt.io/qt-4.8/qmake-variable-reference.html#qt – n611x007

1

¿Está ejecutando la herramienta moc sobre su archivo de cabecera? ¿Compila posteriormente el resultado de la herramienta moc?

+0

Estoy usando Qt Creator. Lo que hice fue ejecutar qmake y luego ejecutar el programa. – Hedge

+1

@Hedge QMake ejecuta la herramienta moc (compilador de metaobjetos), por lo que sería un sí, suponiendo que tiene la configuración de QtCreator para construir orígenes anticuados antes de ejecutar el ejecutable, que es el comportamiento predeterminado. Solo necesita hacer esto cuando cambie o agregue cosas 'Q_OBJECT' por lo general. – AJG85

+0

Gracias por educarme. Lo tendré en mente. – Hedge

Cuestiones relacionadas