错误:获得通过"***"作为"this"....丢弃限定符

error: getting a passing "***" as "this" .... discards qualifiers

本文关键字:this 作为 错误      更新时间:2023-10-16

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

依赖项.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;
}
Dependency::Dependency(std::function<void ()> const & func){
            call_back = func;
}

首先,构造一个Dependency对象,它是call_back成员。然后它进入{},尝试将func重新分配给call_back,这是不允许的,因为call_back是常量。

相反,我们必须告诉编译器第一次用func构造call_back,它使用了以下神奇的语法:

Dependency::Dependency(std::function<void ()> const & func)
:call_back(func)
{
}

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

初始化后无法分配const成员。您必须确保它在构造函数初始化列表中正确初始化。
Dependency::Dependency(std::function<void()> const& func) : call_back(func) {}