C ++中的C2061错误

时间:2017-10-14 08:52:37

标签: c++

我知道这个错误很常见,但我一直试图修复4个小时,并且根本不明白它为什么会发生。

提供错误的文件" shape.h":

#ifndef __shape_atd__
#define __shape_atd__
#include <fstream>
using namespace std;
namespace simple_shapes {
    class shape
    {
        public:
            enum colors { Red, Orange, Yellow, Green, Blue, DarkBlue, Violet };
            colors color;
            static shape* In(int lengt, Creator *c[], istringstream &ifst);         
            virtual void InData(istringstream &) = 0;
            virtual void Out(ofstream &) = 0;
            shape() {};
    }

在我添加&#34; Creator * [] c&#34;之前一切正常。在&#34; In&#34;方法。现在它拒绝编译,错误C2061:语法错误:标识符&#34;创建者&#34;。

这是&#34; Creator.h&#34;文件:

#ifndef __creator_atd__
#define __creator_atd__
namespace simple_shapes {
    class Creator {
    public:
        virtual shape* createShape() = 0;
    };
}
#endif

我已经读过这个错误,因为循环标头依赖,但在我的情况下,我没有它们。此外,&#34; Creator.h&#34;除了孩子之外,程序中的任何其他文件都没有提及。

1 个答案:

答案 0 :(得分:0)

包括shape.h中的Creator.hshape中的转发声明Creator.h。例如 -

#ifndef __creator_atd__
#define __creator_atd__
namespace simple_shapes {
    class shape; // forward declaration
    class Creator {
    public:
        virtual shape* createShape() = 0;
    };
}
#endif

包含shape.h的另一个例子如下 -

#ifndef __creator_atd__
#define __creator_atd__

#include "shape.h"

namespace simple_shapes {
    class Creator {
    public:
        virtual shape* createShape() = 0;
    };
}
#endif