我不知道为什么会收到此错误,因为它在一小时前就完美地编译了,并且在这里我没有做任何更改。

我有一个名为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;
//...


我收到错误消息:未在ctr上声明“ SocketsStatus”,然后将变量声明为protected时,我也收到错误消息:“ SocketsStatus”未命名类型。

一定是一些愚蠢的细节,但是我碰巧看不到哪里!有什么帮助吗?

最佳答案

您具有#include循环依赖性。您的每个标头都试图包含另一个标头。 SocketsStatus是否真的需要了解BufferDatos?您需要删除两个#include之一,可以将它们之一替换为前向声明。

10-08 11:16