有谁知道为什么这段代码无法与VC ++ 2010兼容
class C
{
public:
void M(string t) {}
void M(function<string()> func) {}
};
void TestMethod(function<void()> func) {}
void TestMethod2()
{
TestMethod([] () {
C c;
c.M([] () -> string { // compiler error C2668 ('function' : ambiguous call to overloaded function)
return ("txt");
});
});
}
更新
完整代码示例:
#include <functional>
#include <memory>
using namespace std;
class C
{
public:
void M(string t) {}
void M(function<string()> func) {}
};
void TestMethod(function<void()> func) {}
int _tmain(int argc, _TCHAR* argv[])
{
TestMethod([] () {
C c;
c.M([] () -> string { // compiler erorr C2668 ('function' : ambiguous call to overloaded function M)
return ("txt");
});
});
return 0;
}
答案 0 :(得分:1)
这是VC ++编译器的错误。
答案 1 :(得分:0)
你没有发布错误信息,所以通过查看我的水晶球我只能得出结论你遇到了这些问题:
你需要在顶部
#include <string>
#include <functional>
您需要添加
using namespace std;
或
using std::string; using std::function;
或 std :: function ... std :: string ...
main()
int main() {}
foo@bar: $ cat nested-lambda.cc
#include <string>
#include <functional>
class C
{
public:
void M(std::string t) {}
void M(std::function<std::string()> func) {}
};
void TestMethod(std::function<void()> func) {}
void TestMethod2()
{
TestMethod([] () {
C c;
c.M([] () -> std::string { // compiler error C2668
return ("txt");
});
});
}
int main() {
}
foo@bar: $ g++ -std=c++0x nested-lambda.cc
工作正常。