错误:将"***"作为"此"传递....丢弃限定符

Pet*_*ste -3 c++

编译器告诉我我不能在构造函数中进行赋值.我在另一个类中有非常相似的代码,它编译得很好.

Dependency.h

class Dependency {
public:
    Dependency(std::function<void ()> const & func);

private:
    std::function<void ()> const call_back;
};

Dependency::Dependency(std::function<void ()> const & func){
    call_back = func;
}
Run Code Online (Sandbox Code Playgroud)

Moo*_*uck 6

Dependency::Dependency(std::function<void ()> const & func){
            call_back = func;
}
Run Code Online (Sandbox Code Playgroud)

首先,这构造了一个Dependency对象,它是它的call_back成员.然后它进入{},它试图重新分配funccall_back,这是不允许的,因为call_back是常量.

相反,我们必须告诉编译器构造call_backfunc第一次使用这个神奇的语法:

Dependency::Dependency(std::function<void ()> const & func)
:call_back(func)
{
}
Run Code Online (Sandbox Code Playgroud)

您使用相同的技术来调用父类的特定构造函数.请注意,它忽略了您在此处使用的顺序,编译器将始终首先构造父类,然后按照它们在类定义中声明的顺序构造成员.