C++ c++;lambda代表

C++ c++;lambda代表,c++,visual-c++,lambda,c++11,visual-studio-2012,C++,Visual C++,Lambda,C++11,Visual Studio 2012,编辑:嗯,在其他人的建议下,我创建了一个最小的例子。。。它成功了,所以我将在这里为将来的任何人分享它。以下是工作代码: #include <iostream> #include <functional> using namespace std; class myClass { char* str; public: myClass() { str = ""; } void funcA() {

编辑:嗯,在其他人的建议下,我创建了一个最小的例子。。。它成功了,所以我将在这里为将来的任何人分享它。以下是工作代码:

#include <iostream>
#include <functional>

using namespace std;

class myClass
{
    char* str;
public:
    myClass()
    {
        str = "";
    }

    void funcA()
    {
        funcB([](myClass* mc)
            {
                mc->str = "HelloWorld";
            }
        );
    }

    void funcB(std::function<void (myClass*)> otherFunc)
    {
        otherFunc(this);
    }     

    void printStr()
    {
        cout << str;
    }
};

int main()
{
    myClass mc;
    mc.funcA();
    mc.printStr();
    int done;
    cin >> done;
}
#包括
#包括
使用名称空间std;
类myClass
{
char*str;
公众:
myClass()
{
str=“”;
}
void funcA()
{
funcB([](myClass*mc)
{
mc->str=“HelloWorld”;
}
);
}
void funcB(std::function otherFunc)
{
otherFunc(本);
}     
void printStr()
{
不能做;
}
我的原始代码不起作用的原因是我将funcB的声明和实现分为两部分(.h和.cpp),在.h中我这样做了

void funcB(std::function<void (myClass*)> otherFunc = NULL)
void funcB(std::function otherFunc=NULL)

据我所知,你绝对不能在这里传递NULL,这对我来说很烦人,希望是一个bug。但除此之外,它是有效的。

你不能传递
NULL
但是你可以传递
nullptr

请发布编译器错误。你的lambda不是
void(TravelManager*)格式的
根据您的函数原型的要求。它只是
void()
要匹配
std::function
参数,您的lambda必须按参数使用
TravelManager*
。发布一个最小的完整示例,以及您得到的错误。请参阅。这里没有人知道您在哪一行得到错误,任何类型的定义可能相关,也可能不相关,等等。如果您的最小示例没有如果将问题与实际代码相同,那么它就不是一个真正的示例…;-]+1实际上,无论是
std::function otherFunc=std::function()
还是
std::function otherFunc=nullptr
都可以,但显然后者更简洁。在更一致的编译器上,我认为
std::function otherFunc={}
也应该可以。