0

我不知道为什么我会收到这个错误,因为它在一小时前编译得很好,我在这里没有做任何改变。

我有一个名为 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' has not been declared at the ctr,然后在将变量声明为受保护时,我也收到错误:'SocketsStatus' does not name a type

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

4

2 回答 2

5

你有一个#include循环依赖。您的每个标题都尝试包含另一个标题。SocketsStatus真的需要了解一下吗BufferDatos?您需要删除两个#includes 之一,您可以将其中一个替换为前向声明。

于 2012-05-31T16:29:41.747 回答
1

打破你的循环#include依赖(通过省略其中一个#include指令)并用一个(或几个)前向声明替换它。

实际上,我认为您不需要#include <Bufferdatos.h>在第一个标题中。

于 2012-05-31T16:35:01.513 回答