プロジェクトの大規模なリファクタリングを行って、現在の基本クラスの派生クラスの代わりに基本クラスを追加しました (このクラスの「タイプ」がもっと必要なため)。
私の問題は、一部のユーティリティ関数が元のクラス A の参照を shared_ptr として受け取るため、関数宣言が次のようになることです。
void UtilityClass::func(shared_ptr<A> &a);
しかし、新しい基本クラス B があり、A が B から派生した (および B から派生した新しいクラス C) ため、A または C のインスタンスを渡そうとすると、コンパイル時エラーが発生します。宣言が次の関数に:
void UtilityClass::func(shared_ptr<B> &b);
私が試してみると:
shared_ptr<A> a;
utilclass.func(a);
コンパイル時に次のようなエラーが表示されます (言い換え):
パラメータ 1 を 'std::shared_ptr<_Ty>' から 'std::shared_ptr<_Ty>' に変換できません
しかし、他にこの問題を解決する方法がわかりません。 func() は A、B、または C インスタンスを shared_ptr 値の std::vector に追加します。
御時間ありがとうございます。
編集: B の新しいインスタンスを割り当ててから返すことができるように、参照を取る別の関数もあります。