我有一个班级,我知道为什么它无法编译:
// My class .hpp
class MyClass
{
public:
MyClass();
MyClass(/*yet another constructor*/);
private:
FOO::Dependancy dep_1;
};
// Dependancy.hpp
namespace FOO {
class Dependancy : public Parent
{
public:
Dependancy(const Bar& _bar);
~Dependancy();
virtual int method_1(/*bla*/);
virtual int method_1(/*bla bla*/);
private:
const Bar _bar;
};
}
如您所见,依赖类具有const成员。所以在编译时,(与g ++不同)clang ++告诉我代码究竟出了什么问题:
1. error: object of type 'MyClass' cannot be assigned because its copy assignment operator is implicitly deleted
2. copy assignment operator of 'MyClass' is implicitly deleted because field 'dep_1' has a deleted copy assignment operator
3. copy assignment operator of 'Dependancy' is implicitly deleted because field '_bar' has no copy assignment operator
我的问题是,如何解决问题,知道FOO::Dependancy
及其自己的成员(即Bar
)等等,是我无法访问的静态库他们的源代码。换句话说,我无法对那个const成员做任何事情,我必须在我自己的课堂上解决这个问题。
答案 0 :(得分:1)
错误非常清楚
“MyClass”类型的对象无法分配,因为其隐式删除了其复制赋值运算符
因此,隐式删除了复制分配,您必须自己指定/创建一个。
删除它的原因是dep_1
,因为您可以从第二个错误中看到
'MyClass'的复制赋值运算符被隐式删除,因为字段'dep_1'具有已删除的复制赋值运算符
现在,如果您想知道为什么dep_1
没有复制赋值运算符,请查看第三个错误:
隐式删除
归结为_bar
类型Bar
没有复制赋值运算符,因为它已被定义为const
。
正如您所说,您无法更改班级Dependancy
,因此唯一的解决方案是自己在MyClass
创建一个复制赋值运算符。