C++ 在类定义C+之前使用类成员函数指针+;

C++ 在类定义C+之前使用类成员函数指针+;,c++,class,typedef,C++,Class,Typedef,我有以下代码: //文件名:compiler.h typedef枚举优先级{/*枚举成员*/}优先级; typedef枚举标记类型{/*枚举成员*/}标记类型; typedef void(编译器::*ParseFn)(); typedef结构解析规则{ ParseFn前缀; ParseFn中缀; 优先权; }语法规则; 类编译器{ 公众: std::无序映射规则; ParseRule getRule(令牌类型){ 返回规则[类型]; }; void binary(); 无效一元(); }; 我

我有以下代码:

//文件名:compiler.h
typedef枚举优先级{/*枚举成员*/}优先级;
typedef枚举标记类型{/*枚举成员*/}标记类型;
typedef void(编译器::*ParseFn)();
typedef结构解析规则{
ParseFn前缀;
ParseFn中缀;
优先权;
}语法规则;
类编译器{
公众:
std::无序映射规则;
ParseRule getRule(令牌类型){
返回规则[类型];
};
void binary();
无效一元();
};
我试图定义一个hashmap,它将
TokenType
的键映射到具有struct
ParserRule
形式的值

Compiler::rules
hashmap的键值对示例如下:

rules[TOKEN_-MINUS]={一元、二元、PREC_-TERM}
当我尝试使用C++11进行编译时,会出现以下错误,以及其他许多错误:

./compiler/compiler.h:58:15: error: use of undeclared identifier 'Compiler'
typedef void (Compiler::*ParseFn)();
这是有意义的,因为在定义
编译器
类之前,我试图使用类
编译器
来定义类型
ParseFn

我对C/C++编码非常陌生(我几周前开始学习),因此我想知道是否有其他方法可以定义类型和类而不会导致编译器错误。

在引用它之前,您需要(预先)将
编译器声明为类:

class Compiler;

typedef void (Compiler::*ParseFn)();

这并不能解决这个问题,但是在C++中,你不必做<代码> TyPulfEnUm优先{{}}优先权;代码>舞蹈。这是一个C的东西。在C++中,<代码>枚举优先级{…};<代码>足够了。这很有效,非常感谢!我曾多次想过这样做,但感觉就像我声明了两次类,我认为这会抛出一个错误。只要声明匹配,您可以任意多次声明。您只能定义它们一次。