2 Stimmen

Probleme mit verschachtelten Lambdas in VC++

Weiß jemand, warum dieser Code nicht mit VC++ 2010 kompilierbar ist?

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");
        });
    });
}

Aktualisierung:

Vollständiges Code-Beispiel:

#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;
}

1voto

rzlwatboa Punkte 31

0voto

Sebastian Mach Punkte 37301

Sie haben die Fehlermeldung nicht gepostet, also kann ich nur durch einen Blick in meine Kristallkugel schließen, dass Sie diese Probleme haben:

Fehlende #includes

Sie benötigen an der Spitze

#include <string>
#include <functional>

Fehlende Namensqualifikationen

Sie müssen entweder Folgendes hinzufügen

using namespace std;

o

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

oder std::function ... std::string ...

Fehlende Funktion main()

int main() {}

Arbeitet mit 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

Funktioniert gut.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X