首页 > 解决方案 > 在类定义 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来定义类型。ParseFnCompiler

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

标签: c++classtypedef

解决方案


Compiler在引用它之前,您需要(预先)声明为一个类:

class Compiler;

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

推荐阅读