我知道这个错误很常见,但我一直试图修复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;除了孩子之外,程序中的任何其他文件都没有提及。
答案 0 :(得分:0)
包括shape.h
中的Creator.h
或shape
中的转发声明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