2013-04-23 93 views
0

我在的Visual Studio 2012得到以下語法錯誤:語法錯誤的功能

1> ... \文件\的Visual Studio 2012 \項目... \ line.h (21):錯誤C2143:語法錯誤:缺少前 'const' ')'

試圖創建下述(它是在另一文件中定義)也tokenListtypedefstd::vector<std::string>時:

extern std::map<std::string,std::function<std::string (const tokenList& tokens)>> evaluateOperator; //<-- This is the line with the error

,我希望能做到以下幾點:

evaluateOperator["="] = [](const tokenList& tokens) -> std::string 
{ 
    std::string temp(""); 
      ... 
}; 

我在做什麼錯? (我對C++ 11非常陌生)。我也希望對於如何解決整個問題提出任何建議,即在基於輸入字符串的字符串列表上應用函數。謝謝。

編輯:這就是爲什麼SSCE是如此重要 - 我找到了錯誤的來源(使用ICC2013後)作爲錯誤的代碼順序 - typedef來自映射聲明後。對我而言,我是無知的,但有趣的是,英特爾C++編譯器2013能夠立即檢測出語法錯誤的原因,而VC++卻一頭霧水。

+1

關閉'>>'通常在它們之間有空格,即''>''。 – Dilawar 2013-04-23 23:40:14

+1

@Dilawar但是如果他有C++ 11,不應該這樣做**不是**問題? – 0x499602D2 2013-04-23 23:40:53

+0

@Dilawar嗯我是在假設C++ 11已經解決了這個問題。無論如何,問題仍然存在 – 2013-04-23 23:41:15

回答

1

您聲稱發生錯誤的行與C++ 11專有的語法屬性沒有多大關係。除了std::function,但是如果你的編譯器不支持,它不會表達它的語法錯誤編譯失敗。

也許錯誤來自它下面的代碼。我不認爲VS支持lambdas,但這可能是錯誤的根源。請注意,您的代碼在GCC中編譯得很好。

+0

從以下鏈接中,我相信VS2010支持大多數lambda功能,而VS 2012則負責處理邊緣情況。我會研究你的「其他路線」建議,並嘗試製作一個SSCE。謝謝您的幫助! http://msdn.microsoft.com/en-us/library/vstudio/hh567368。aspx – 2013-04-24 14:53:15

+0

作爲一個附錄,所有東西都被包裝在一個名稱空間中 - 我不認爲這會導致任何問題,但情況可能如此嗎?編輯:它不會改變任何東西:/ – 2013-04-24 14:57:30

+0

正是你所說的 - 錯誤來自下面的代碼哈哈謝謝! – 2013-04-24 15:19:07