我正在尝试在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;
};
产生此错误:
错误C2678:二进制
'<'
:找不到哪个运算符采用const std::string
类型的左侧操作数(或者没有可接受的转换)
我不能对这个错误做出正面或反面。
我用g ++和clang测试了这个。他们可以编译它。 http://liveworkspace.org/code/4kVlUY$72
我如何让Visual Studio编译它?任何解决方法?
答案 0 :(得分:4)
问题与您的期望完全无关:
#include <string>
解决它。似乎比较运算符需要显式包含<string>
,而如果仅包含<map>
则定义类本身。
答案 1 :(得分:1)
您的代码可以使用GCC 4.7.2,Clang 3.2,ICC 13.0.1编译。
如果#include
<string>
标题,你在LiveWorkSpace上发布的示例中省略了它,那么它在VC10上编译也很好。
可能stdlibc ++实现包含来自您直接#include
的其他头文件的头文件,而MS的C ++标准库实现则不是这样。
尝试添加#include
指令,问题就会消失。