2013-04-23 183 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