1

在这里声明一个集合有什么问题,这是我的教授代码。

set<Token> stmtBeginTokens
{
    Token::IF, Token::ID, Token::WHILE, Token::INPUT,
        Token::OUTPUT, Token::EMPTYSTMT, Token::BREAK,
        Token::RETURN, Token::HALT, Token::NEWLINE
};

稍后(供参考):

bool isSTMTBegin(Token t)
{
    return stmtBeginTokens.find(t) != stmtBeginTokens.end();
}

错误是 1>c:\users\sam\dropbox\compiler project 2\compilerproject2\lex\imp.h(39): error C2473: 'stmtBeginTokens' : 看起来像函数定义,但没有参数列表。

我的教授使用 c++11,我有旧版本,是这个问题吗?我阅读了参考资料,但它似乎过于复杂和令人困惑。

谢谢!

4

1 回答 1

2

你必须使用 C++11 来编译它,它使用initializer_list.

set<Token> stmtBeginTokens { ...
                           ^ initializer_list (since C++11)

如果您的编译器支持 C++11,请使用-std=c++11编译选项 (gcc)。

于 2013-05-05T10:37:58.953 回答