class Base{};
class C;
class A : Base {
unique_ptr<Base> x;
unique_ptr<A> y;
someMethod(){
if (sth) {
x = make_unique<C>(); // error no viable overloaded '=', see below
}
}
}
class B : Base {
A x;
unique_ptr<B> y;
}
class C : Base {
B x;
}
どうすれば解決できますか?クラスのサイズは決定可能でなければならない。それが私の知る全てだ。私も、ポインタとしてメンバ変数A x
とC x
を行い、Aの上にBとCを動かすが、私は同じエラーを取得すると思いますが、呼び出すときにAのunique_ptrからの変換はありません。
error: no viable overloaded '='
candidate function not viable: no known conversion from 'unique_ptr<C, default_delete<C>>' to 'unique_ptr<Base, default_delete<Base>>
ます。また、[CRTP]使用することができます。
単に
C
後A::someMethod()
の実装を移動するには、完全例えば、(例えば.cpp
ファイルとして)定義されています/ wiki/Curiously_recurring_template_pattern)。 – Eljay私がテストした回答がなぜ削除されたのですか? C言語の後にA :: someMethodを定義する必要があると言いました。 – Adam
Um ...ここではいくつかの問題がありますが、 'Base'は' C'の* private *ベースなので、これはコンパイルする機会はありません。 – AnT