我不知道为什么我会收到这个错误,因为它在一小时前就完美编译了,我在这里没有做任何改动。
我有一个名为SocketsStatus的类,然后我有许多线程,每个线程实现一个套接字连接。所以我传递了一个对SocketsStatus对象的引用来控制哪些是连接的,哪些不是。
SocketsStatus标题:
#ifndef SOCKETSSTATUS_H_
#define SOCKETSSTATUS_H_
#include <QMutex>
#include <BufferDatos.h>
class SocketsStatus {
public:
SocketsStatus();
int setBufferStatus(int bufferId, bool status);
bool isEveryBufferDisconnected();
virtual ~SocketsStatus();
private:
void init();
bool bufferRawMeasConnected;
bool bufferPosConnected;
bool bufferRtkConnected;
QMutex *mutex;
};
#endif /* SOCKETSSTATUS_H_ */
然后,BufferDatos的标头的开头,这是我的Thread类:
#ifndef BUFFERDATOS_H_
#define BUFFERDATOS_H_
#include <QThread>
#include <QTcpSocket>
#include <SocketsStatus.h>
#include "Global.h"
class BufferDatos: public QThread {
public:
BufferDatos(QString ip, qint16 port, SocketsStatus &buffersStatusPassed);
virtual QByteArray extraerSiguienteMensaje(void) = 0;
virtual ~BufferDatos();
protected:
void run(void);
bool connect(void);
void receiveData(void);
bool reconnect(int &timeoutsWithOpenSocket);
protected:
QTcpSocket *tcpSocket;
QString ip;
qint16 port;
SocketsStatus &buffersStatus;
//...
我收到错误:'socketsStatus'尚未在ctr声明,然后在声明变量为protected时我也得到错误:'SocketsStatus'没有命名为输入即可。
必须是一些愚蠢的细节,但我不会发现在哪里!有什么帮助吗?
答案 0 :(得分:5)
您有#include
个循环依赖项。每个标题都尝试包含另一个标题。 SocketsStatus
真的需要了解BufferDatos
吗?您需要删除两个#include
中的一个,您可以使用前向声明替换其中一个。
答案 1 :(得分:1)
打破循环#include
依赖关系(通过省略其中一个#include
指令)并将其替换为(或少数)前向声明。
事实上,我认为你不需要在第一个标题中#include <Bufferdatos.h>
。