我有一个基类,很少有类从中派生出来。我没有在基类中编写任何复制构造函数,它使用默认的。
所以如果我写这段代码:
base* b;
b = new base(*this)
它工作正常,但如果我写这样的东西:
base* b;
b = new derive(*this)
它给出了派生类中没有匹配函数的错误。
我不能将基类'this
指针传递给它的派生类复制构造函数来初始化吗?
答案 0 :(得分:3)
Derived
复制构造函数将const Derived &
作为参数。您不能使用const Base &
作为参数。
您正在尝试:
Derived *d = new Derived();
Base *b = new Base(*d); //ok, since Derived is subclass of Base
Base *b = new Based();
Derived *d = new Derived(*b); //error, since Base in not subclass of Derived
为了从Derived
构建Base
,您需要自己提供这样的构造函数:
Derived(const Base &base) {...}
答案 1 :(得分:0)
使用将基类作为参数的版本重载派生的构造函数。这应该有用。
答案 2 :(得分:0)
base
的其他子类。如果类derive
的复制构造函数接受const base&
,那么您可以将其传递给base
的另一个子类的实例。类derive
的复制构造函数不知道如何处理这样的对象。