Проблемы с вложенными лямбдами в VC ++ - PullRequest
2 голосов
/ 02 сентября 2011

Кто-нибудь знает, почему этот код не компилируется с 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;
}

Ответы [ 2 ]

1 голос
/ 14 сентября 2011
0 голосов
/ 02 сентября 2011

Вы не опубликовали сообщение об ошибке, поэтому, глядя в мой хрустальный шар, я могу только заключить, что вы страдаете этими проблемами:

Отсутствует # включает

Вам нужно наверху

#include <string>
#include <functional>

Отсутствует квалификация имени

Вам нужно либо добавить

using namespace std;

или

using std::string; using std::function;

или std :: function ... std :: string ...

Отсутствует функция main()

int main() {}

Работает с g ++

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

Работает нормально.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...