错误:CLASS_NAME尚未声明/未命名类型(c ++)

时间:2012-05-31 16:27:29

标签: c++

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

我有一个名为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'没有命名为输入即可。

必须是一些愚蠢的细节,但我不会发现在哪里!有什么帮助吗?

2 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:1)

打破循环#include依赖关系(通过省略其中一个#include指令)并将其替换为(或少数)前向声明。

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