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 来解决这个问题。