为什么我的代码生成语法错误

Why is my code generating a syntax error?

本文关键字:错误 语法 代码生成 我的 为什么      更新时间:2023-10-16

以下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 文件中。

我不明白为什么会发生此错误?

请帮助我

谢谢

按照 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。 事实上,你可以通过删除 IObject.h #include 来避免更多的混淆,

并转发声明与上面类似......
virtual void writeObject( Object::IObject* ) = 0;

替换

#using namespace Object;

using namespace Object;