2013-05-05 85 views
0

在這裏聲明一個集合有什麼問題,這是我的教授代碼。聲明一組C++

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:\用戶\ SAM \保管箱\編譯項目2 \ compilerproject2 \法\ imp.h(39):錯誤C2473:'stmtBeginTokens':看起來像一個函數定義,但沒有參數列表。

我的教授使用c + + 11和我有舊版本,是這個問題?我閱讀了參考資料,但看起來過於複雜和令人困惑。

謝謝!

+6

是的,您應該使用C++ 11,這是自C++ 11以來支持的initializer_list。 – deepmax 2013-05-05 10:35:28

+1

@MM .:做出答案;) – 2013-05-05 10:36:24

回答

2

您必須使用C++ 11編譯它,它使用initializer_list

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

如果你的編譯器支持C++ 11,使用-std=c++11編譯選項(GCC)。

+0

從技術上講,大括號並不意味着'initializer_list',而是使用C++ 11的統一初始化語法。只是在構造函數參數中隱式創建了'initializer_list'的情況,因爲(按定義)是最好的匹配。 – Grizzly 2013-05-05 10:50:09

+0

Visual Studio沒有C++ 11。我是否需要創建一個向量並將其推入一個集合? – 2013-05-05 10:55:20

+0

你有哪個版本的Visual Studio?如果它沒有C++ 11,那麼可以將它們推入集合中。 – deepmax 2013-05-05 11:11:25