! "使用未定义类型,未知重写说明符"
错误示范:
#pragma pnce
#include <QObject>
#include <QProcess>
#include <QString>
#include <atomic>
#include <QTimer>
#include <QThread>
class ProcessManager;
class MessageRecviver : public QObject
{
Q_OBJECT
public:
MessageRecviver(ProcessManager* p_in):p(p_in){}
public slots:
void recv()
{ };
private:
ProcessManager* p;
};
class ProcessManager : public QObject
{
Q_OBJECT
public:
explicit ProcessManager(QObject *parent = 0);
bool start(const std::string& cmd, uint16_t int_sec_in);
void stop();
std::atomic_bool flag_is_in_pushing;
signals:
public slots:
private slots:
void SLOT_finished(int exitCode, QProcess::ExitStatus exitStatus);
void SLOT_timeoutReconnect();
private:
void connectSlot();
void killProcess();
private:
QProcess* p_qprocess_instance{nullptr};
uint64_t p_id{0};
std::string exe_name;
uint16_t int_sec;
uint64_t time_stamp_last_push;
QThread thread_instance;
MessageRecviver message_reciver;
};
A: 循环包含导致包含不清;
A包含B,同时B包含A,想用前置声明来解决问题,此种想法过于简单
在声明之后,定义之前,类是一个不完全类型(incompete type),即已知向前声明过的类是一个类型,但不知道包含哪些成员。不完全类型只能以有限方式使用,不能定义该类型的对象,不能使用该类的函数或成员.不完全类型只能用于定义指向该类型的指针及引用,或者用于声明(而不是定义)使用该类型作为形参类型或返回类型的函数。解决办法:
- 1 老老实实写
.h``.cpp文件
- 2
.h中使用了指针类型成员可使用前置声明