2011-04-13 5 views
6

Я добавил класс IcecastServer в свой QT-проект, добавил заголовочный файл в файл pro и добавил код. Everytime я скомпилировать следующие ошибки происходят: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>, где предполагается, что прокомментированная строка является причиной проблемы.

Вы также можете проверить некоторые настройки проекта, чтобы узнать, есть ли у вас все правильные входы.

Edit: Подробнее

QtNetwork требует QT сети Lib входов. Предполагая, что еще раз, что вы используете QtCreator не так много информации была предоставлена, то это означает, что в вашем файле .pro вам нужно иметь строку так:

QT += network

Затем убедитесь, что вы включили правильные заголовки для объекты, которые вы используете перед их использованием. Если вы все еще получаете неопределенные ссылки, связывание ошибок и т. Д., Попробуйте QMake и перестройте. Если он по-прежнему сохраняется, вероятно, у вас есть ошибки в коде в дополнение к ошибкам использования QT и должен проверить правильность объявления ваших методов и объектов.

Final Edit: Рад, что работал ...

При создании нового проекта в QtCreator есть шаг в мастере, где вы можете проверить от различных QT библиотеки, которые вы хотите включить, которые будут добавлять их. pro линий и входов для вас. Это версия QT для ввода дополнительных файлов lib, и по умолчанию они будут статически связаны, я полагаю.Если вы хотите динамически связываться с общими объектами или dll, то есть некоторые дополнительные шаги настройки.

+0

Я добавил, что включите, но, как вы сказали, его прокомментировали, так что это не устранило проблему. Какие входы вы говорите? – Hedge

+1

yay! Проблема с добавлением сети в про-файл. – Hedge

+0

для 'QT + = network' ссылку можно найти по адресу 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 для построения устаревших источников до запуска исполняемого файла, который является поведением по умолчанию. Вам нужно сделать это только при изменении или добавлении вещей 'Q_OBJECT'. – AJG85

+0

Спасибо, что просветил меня. Я буду помнить об этом. – Hedge

Смежные вопросы