Qt неопределенные ссылочные ошибки при попытке компиляции

я добавил класс IcecastServer в свой QT-проект, добавил файл заголовка в файл pro и добавил некоторый код. Каждый раз, когда я компилирую его, возникают следующие ошибки:

release / icecastserver.o: icecastserver.СРР.(:text+0x39): неопределенная ссылка на _imp___ZN10QTcpServerC1EP7QObject' release/icecastserver.o:icecastserver.cpp:(.text+0x50): undefined reference toИМПZN12QHostAddressC1ENS_14SpecialAddresse' release / icecastserver.o: icecastserver.СРР.(:text+0x68): неопределенная ссылка на _imp___ZN10QTcpServer6listenERK12QHostAddresst' release/icecastserver.o:icecastserver.cpp:(.text+0x73): undefined reference to_imp_ZN12QHostAddressD1Ev' release / icecastserver.o: icecastserver.СРР.(:text+0x9d): неопределенная ссылка на _imp___ZNK10QTcpServer11errorStringEv' release/icecastserver.o:icecastserver.cpp:(.text+0x3d4): undefined reference toИМПZN12QHostAddressD1Ev' release / icecastserver.o: icecastserver.СРР.(:text+0x4bd): неопределенная ссылка на _imp___ZN10QTcpServerC1EP7QObject' release/icecastserver.o:icecastserver.cpp:(.text+0x4d4): undefined reference to_imp_ZN12QHostAddressC1ENS_14Specialaddresse' release / icecastserver.o: icecastserver.СРР.(:text+0x4ec): неопределенная ссылка на _imp___ZN10QTcpServer6listenERK12QHostAddresst' release/icecastserver.o:icecastserver.cpp:(.text+0x4f7): undefined reference toИМПZN12QHostAddressD1Ev' release / icecastserver.o: icecastserver.СРР.(:text+0x521): undefined ссылка на _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;
    }

}

2 ответов


сначала нужно #include <QHostAddress> где-то предполагая, что прокомментированная строка является причиной проблемы.

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

Edit: Подробнее

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

QT += network

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

окончательное редактирование: рад, что работал ...

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


вы используете moc инструмент над заголовочным файлом? Вы впоследствии компилируете вывод из ?