0

このエラーが発生する理由はわかりません。1時間前に完全にコンパイルされ、ここで変更を加えていないためです。

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_ */

次に、私のThreadクラスであるBufferDatosのヘッダーの始まり:

#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で宣言されていません。次に、変数を保護されていると宣言すると、エラーも発生します:'SocketsStatus'は型を指定しません

ばかげた詳細に違いないが、どこにいるのかわからない!何か助けはありますか?

4

2 に答える 2

5

#include循環依存があります。各ヘッダーは、他のヘッダーを含めようとします。SocketsStatus本当に知る必要がありBufferDatosますか?2つのうちの1つを削除する必要があり、そのうち#includeの1つを前方宣言に置き換えることができます。

于 2012-05-31T16:29:41.747 に答える
1

循環#include依存関係を(ディレクティブの1つを省略して)解除#includeし、それを(またはいくつかの)前方宣言に置き換えます。

#include <Bufferdatos.h>実際、最初のヘッダーに含める必要はないと思います。

于 2012-05-31T16:35:01.513 に答える