Visual Studio 2017 年 QtMetaObject 未解决的外部错误
QtMetaObject unresolved external Error in Visual Studio 2017
我正在尝试在 QT 中实现一个简单的服务器客户端应用程序。我正在使用 Visual Studio 2017。
这是我的客户 class.
的头文件
#pragma once
#ifndef Client_H
#define Client_H
#include <QTcpSocket>
class Client : public QObject
{ Q_OBJECT
public:
explicit Client (QObject *parent = 0);
void Connect();
signals:
public slots:
private:
QTcpSocket *socket;
};
#endif
这是 Client.cpp
的代码
#include "Client.h"
Client::Client(QObject *parent) :
QObject(parent)
{
}
void Client::Connect()
{
socket = new QTcpSocket(this);
socket->connectToHost("192.168.10.10", 8016);
if (socket->waitForConnected(3000))
{
printf("COnnected");
}
else
{
printf("Not Connected");
}
}
如您所见,它非常简单。在我的 Main.cpp 中,我创建了一个客户端 class 的实例,然后调用函数 Connect():
Client Test;
Test.Connect();
构建我的项目时出现以下错误
1>Client.obj : error LNK2001: unresolved external symbol "public: virtual struct QMetaObject const * __cdecl Client::metaObject(void)const " (?metaObject@Client@@UEBAPEBUQMetaObject@@XZ)
1>Client.obj : error LNK2001: unresolved external symbol "public: virtual void * __cdecl Client::qt_metacast(char const *)" (?qt_metacast@Client@@UEAAPEAXPEBD@Z)
1>Client.obj : error LNK2001: unresolved external symbol "public: virtual int __cdecl Client::qt_metacall(enum QMetaObject::Call,int,void * *)" (?qt_metacall@Client@@UEAAHW4Call@QMetaObject@@HPEAPEAX@Z)
我知道这个错误的意思是声明了函数但是缺少定义。我只是不知道在哪里可以找到这些定义以及我必须 link 删除这些错误的文件。
谢谢
这些文件由moc
工具自动生成。每当您的头文件更改时,您是否将其设置为 运行 ?您 运行 是手动操作的吗?如果没有,请考虑安装 Qt Visual Studio tools 来解决这个问题。
我正在尝试在 QT 中实现一个简单的服务器客户端应用程序。我正在使用 Visual Studio 2017。 这是我的客户 class.
的头文件#pragma once
#ifndef Client_H
#define Client_H
#include <QTcpSocket>
class Client : public QObject
{ Q_OBJECT
public:
explicit Client (QObject *parent = 0);
void Connect();
signals:
public slots:
private:
QTcpSocket *socket;
};
#endif
这是 Client.cpp
的代码#include "Client.h"
Client::Client(QObject *parent) :
QObject(parent)
{
}
void Client::Connect()
{
socket = new QTcpSocket(this);
socket->connectToHost("192.168.10.10", 8016);
if (socket->waitForConnected(3000))
{
printf("COnnected");
}
else
{
printf("Not Connected");
}
}
如您所见,它非常简单。在我的 Main.cpp 中,我创建了一个客户端 class 的实例,然后调用函数 Connect():
Client Test;
Test.Connect();
构建我的项目时出现以下错误
1>Client.obj : error LNK2001: unresolved external symbol "public: virtual struct QMetaObject const * __cdecl Client::metaObject(void)const " (?metaObject@Client@@UEBAPEBUQMetaObject@@XZ)
1>Client.obj : error LNK2001: unresolved external symbol "public: virtual void * __cdecl Client::qt_metacast(char const *)" (?qt_metacast@Client@@UEAAPEAXPEBD@Z)
1>Client.obj : error LNK2001: unresolved external symbol "public: virtual int __cdecl Client::qt_metacall(enum QMetaObject::Call,int,void * *)" (?qt_metacall@Client@@UEAAHW4Call@QMetaObject@@HPEAPEAX@Z)
我知道这个错误的意思是声明了函数但是缺少定义。我只是不知道在哪里可以找到这些定义以及我必须 link 删除这些错误的文件。
谢谢
这些文件由moc
工具自动生成。每当您的头文件更改时,您是否将其设置为 运行 ?您 运行 是手动操作的吗?如果没有,请考虑安装 Qt Visual Studio tools 来解决这个问题。