【问题标题】:Nested lambdas in Visual StudioVisual Studio 中的嵌套 lambda
【发布时间】:2013-01-25 04:50:04
【问题描述】:

我正在尝试在 Visual Studio 2012 中保存一个嵌套的 lambda 函数。

class Wrap
{
public:
  typedef function<void(Wrap*)> Method;
  Method method;
  std::map<string, Wrap> methods;
};

Wrap x;
x.method = [](Wrap *arg) {
    Wrap::Method t = [](Wrap*) {};
    arg->methods["child"].method = t;
};

产生此错误的原因:

error C2678: binary '&lt;' : no operator found 接受const std::string 类型的左操作数(或没有可接受的转换)

我无法确定这个错误的正面或反面。

我已经在 g++ 和 clang 中对此进行了测试。他们可以编译它。 http://liveworkspace.org/code/4kVlUY$72

我将如何让 Visual Studio 编译它?有什么解决方法吗?

【问题讨论】:

    标签: c++ c++11 lambda visual-studio-2012


    【解决方案1】:

    这个问题与你的预期完全无关:

    #include <string>
    

    解决了。似乎比较运算符需要显式包含&lt;string&gt;,而如果您仅包含&lt;map&gt;,则定义类本身。

    【讨论】:

    • 哇!我一直在看错误的地方。谢谢。
    【解决方案2】:

    您的代码可以使用 GCC 4.7.2、Clang 3.2、ICC 13.0.1 编译。

    并且如果您在 #include &lt;string&gt; 标头(您在 LiveWorkSpace 上发布的示例中省略了该标头),它也可以在 VC10 上正常编译。

    可能,stdlibc++ 实现包括来自您直接#include 的其他头文件中的头文件,而 MS 的 C++ 标准库实现并非如此。

    尝试添加 #include 指令,问题应该会消失。

    【讨论】:

      猜你喜欢
      • 2017-08-15
      • 2018-01-21
      • 2016-02-12
      • 1970-01-01
      • 1970-01-01
      • 2021-07-26
      • 1970-01-01
      • 2010-12-19
      • 2012-01-07
      相关资源
      最近更新 更多