c++ - 在类定义 C++ 之前使用类成员函数指针
问题描述
我有以下代码:
// FILE_NAME: compiler.h
typedef enum Precedence { /* ENUM MEMBERS */ } Precedence;
typedef enum TokenType { /* ENUM MEMBERS */ } TokenType;
typedef void (Compiler::*ParseFn)();
typedef struct ParseRule {
ParseFn prefix;
ParseFn infix;
Precedence precedence;
} ParseRule;
class Compiler {
public:
std::unordered_map<TokenType, ParseRule> rules;
ParseRule getRule(TokenType type) {
return rules[type];
};
void binary();
void unary();
};
我正在尝试定义一个哈希映射,它将键映射TokenType
到具有 struct 形式的值ParserRule
。
hashmap的键值对示例Compiler::rules
如下:
rules[TOKEN_MINUS] = {unary, binary, PREC_TERM}
当我尝试使用 C++11 进行编译时,出现以下错误以及许多其他错误:
./compiler/compiler.h:58:15: error: use of undeclared identifier 'Compiler'
typedef void (Compiler::*ParseFn)();
这是有道理的,因为我试图在定义类之前使用类Compiler
来定义类型。ParseFn
Compiler
我对 C/C++ 编码非常陌生(几周前我开始学习),所以我想知道是否有另一种方法来定义类型和类而不会导致编译器错误。
解决方案
Compiler
在引用它之前,您需要(预先)声明为一个类:
class Compiler;
typedef void (Compiler::*ParseFn)();
推荐阅读
- python - 如果一列元素的任何组合总和为 x,则返回相关矩阵行
- javascript - 在页面加载时检查 cookie 并在按钮单击时更新
- objective-c - 为什么我不能在 XPC 服务中为 NSURLSessionDataTask 覆盖 SSL ServerTrust?
- php - 未定义的偏移量:2 和未定义的偏移量:1 和未初始化的字符串偏移量:0
- python - 如何使用 python selenium 在 for 循环中打开多个 chromedrivers?
- elasticsearch - FileBeat:仅主机字段显示为 JSON,而不是字符串
- conv-neural-network - 如何在keras中导入CNN模型
- c# - 当我从另一个窗口更改文本框值时如何更改它
- angular - 使用枚举分配的变量的正确类型定义
- java - 在Android应用程序中将Json转换为Csv格式