5

次の C++ コードは、このエラーを生成しています。

error C2061: syntax error : identifier 'IObject'

これが私のコードです:

ファイル: IObject.h

#include "IIStreamable.h"
using namespace Serialization;
namespace Object
{
    class IObject : public IIStreamable
    {
        virtual void AcceptReader( IIReader* reader ); 
        virtual void AcceptWriter( IIWriter* writer );
    };
}

ファイル: IIWriter

#include "IObject.h"
#using namespace Object;
namespace Serialization
{
    class ICORE_API IIWriter
 {
public:
    // primitive "built in" value types
    virtual void writeChar(const char) =0;
    virtual void writeUChar(unsigned char) =0;
    virtual void writeCharPtr(const char*) =0;
    virtual void writeUCharPtr(const unsigned char*) =0;
    virtual void writeLong(long) =0;
    virtual void writeULong(unsigned long) =0;
    virtual void writeShort(short) =0;
    virtual void writeUShort(unsigned short) =0;
    virtual void writeInt(int) =0;
    virtual void writeUInt(unsigned int) =0;
    virtual void writeFloat(float) =0;
    virtual void writeDouble(double) =0;
    virtual void writeBool(bool) =0;
    virtual void writeObject(IObject*) =0;
    };
 }

ファイル: IIStreamable

#include "IIReader.h"
#include "IIWriter.h"
namespace Serialization
{

class ICORE_API IIStreamable
    {
    public:
    virtual void AcceptReader(IIReader*) = 0;
    virtual void AcceptWriter(IIWriter*) = 0;
    };
 }

このコードを vc++ 2010 でコンパイルした後、このエラーが発生しました

エラー C2061: 構文エラー: 識別子 'IObject'

IIWriter.h ファイルと

エラー C2061: 構文エラー: 識別子 'IIWriter'

IObject.h ファイルと

エラー C2061: 構文エラー: 識別子 'IIWriter'

IIStreamale.h ファイルで。

なぜこのエラーが発生するのか理解できませんか?

私を助けてください

ありがとう

4

2 に答える 2

3

piokucによって提案されたusingディレクティブを使用すると、循環インクルード参照の問題が残ります。

IObject.hを次のように変更することをお勧めします。

namespace Serialization
{
     class ICORE_API IIWriter;
     class ICORE_API IIReader;
}
namespace Object
{
    class IObject : public IIStreamable
    {
        virtual void AcceptReader( Serialization::IIReader* reader ); 
        virtual void AcceptWriter( Serialization::IIWriter* writer );
    };
}

IEは#includeを削除し、IIReaderとIIWriterを前方宣言します。実際、#include IObject.hも削除し、上記と同様に前方に宣言することで、混乱を避けることができます。

virtual void writeObject( Object::IObject* ) = 0;
于 2012-06-11T16:44:15.400 に答える
2

交換

#using namespace Object;

using namespace Object;
于 2012-06-11T16:40:22.550 に答える