C++ 尝试编译时出现QT未定义引用错误
我在QT项目中添加了一个类IcecastServer,在pro文件中添加了头文件,并添加了一些代码。每次编译时,都会出现以下错误: release/icecastserver.o:icecastserver.cpp:(.text+0x39):未定义对C++ 尝试编译时出现QT未定义引用错误,c++,qt,linker,header-files,C++,Qt,Linker,Header Files,我在QT项目中添加了一个类IcecastServer,在pro文件中添加了头文件,并添加了一些代码。每次编译时,都会出现以下错误: release/icecastserver.o:icecastserver.cpp:(.text+0x39):未定义对\u imp\u\u ZN10QTcpServerC1EP7QObject'的引用 release/icecastserver.o:icecastserver.cpp:(.text+0x50):未定义对impZN12QHostAddressC1ENS
\u imp\u\u ZN10QTcpServerC1EP7QObject'的引用
release/icecastserver.o:icecastserver.cpp:(.text+0x50):未定义对
impZN12QHostAddressC1ENS\u 14specialaddress'
release/icecastserver.o:icecastserver.cpp:(.text+0x68):未定义对\u imp\uuuuuuuzn10qtcpserver6Listenerk12qhostAddresst'的引用
release/icecastserver.o:icecastserver.cpp:(.text+0x73):未定义对
\u imp\u ZN12QHostAddressD1Ev'的引用
release/icecastserver.o:icecastserver.cpp:(.text+0x9d):未定义对\u imp\uuuuuuznk10qtcpserver11errorstringev'的引用
release/icecastserver.o:icecastserver.cpp:(.text+0x3d4):未定义对
impZN12QHostAddressD1Ev'的引用
release/icecastserver.o:icecastserver.cpp:(.text+0x4bd):未定义对\u imp\u\u ZN10QTcpServerC1EP7QObject'的引用
release/icecastserver.o:icecastserver.cpp:(.text+0x4d4):未定义的引用
release/icecastserver.o:icecastserver.cpp:(.text+0x4ec):未定义对的引用
release/icecastserver.o:icecastserver.cpp:(.text+0x4f7):未定义对
impZN12QHostAddressD1Ev'的引用
release/icecastserver.o:icecastserver.cpp:(.text+0x521):未定义对\u imp\uuuuuuznk10qtcpserver11errorstringev'的引用
release/icecastserver.o:icecastserver.cpp:(.text+0x858):未定义对
\u imp\u 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
\ifndef icecast服务器\u H
#定义ICECASTSERVER\u H
#包括
QT_开始名称空间
类qtcserver;
QT_END_名称空间
类IcecastServer:公共QObject
{
Q_对象
公众:
显式IcecastServer(QObject*parent=0);
信号:
公众时段:
私人:
qtcserver*tcpServer;
};
#endif//ICECASTSERVER\u 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;
}
}
#包括“icecastserver.h”
#包括“QDebug”
#包括
#包括
IcecastServer::IcecastServer(QObject*parent):
QObject(父对象)
{
tcpServer=新的QTcServer(此);
//tcpServer->listen(QHostAddress::Any,8000);
如果(!tcpServer->listen()){
QMessageBox::critical(NULL,tr(“财富服务器”)、tr(“无法启动服务器:%1”).arg(tcpServer->errorString());
返回;
}
}
您是否在头文件上运行moc
工具?您随后是否从moc
工具编译输出?首先,您需要#在某个地方包含
,假设注释掉的行是导致问题的原因
您可能还需要检查一些项目设置,以查看是否有所有正确的输入
编辑:更多细节
QtNetwork需要QT网络库输入。再次假设您正在使用QtCreator,因为没有提供太多信息,这意味着在.pro文件中,您需要这样一行:
QT+=网络
然后确保在使用对象之前包含正确的标题。如果仍然存在未定义的引用、链接错误等,请尝试QMake
并重新生成。如果它仍然存在,那么除了QT使用错误之外,代码中可能还有错误,并且应该验证正在使用的方法和对象是否正确声明
最后的编辑:很高兴这起作用了
当您在QTCreator中创建一个新项目时,向导中有一个步骤,您可以勾选要包含的各种QT库,这些库将为您添加这些.pro行和输入。这是QT版本的输入额外的lib文件,默认情况下,它们将静态链接,我相信。如果要动态链接共享对象或dll,则需要执行一些额外的配置步骤。我正在使用Qt Creator。我所做的是执行qmake,然后运行程序。@Hedge qmake运行moc(元对象编译器)工具,因此如果您在运行可执行文件(默认行为)之前安装了QtCreator以生成过期的源,那么这将是肯定的。通常,你只需要在更改或添加Q_OBJECT
内容时执行此操作。我添加了include,但正如你所说,它被注释掉了,因此无法解决问题。您在谈论哪些输入?有关QT+=network
的参考,请访问