前提・実現したいこと
C++初心者です。
子クラスのインスタンスを親クラス型の変数に代入しようとするとエラーが発生し、解決方法が分かりません。
発生している問題・エラーメッセージ
error: no viable conversion from 'shared_ptr<ChildClass>' to 'shared_ptr<ParentClass>'
普通、子クラスのインスタンスは親クラスの変数に代入できるはずですが、なぜかこうなりました。
このような状況になりうる原因があれば、教えていただきたいです。
該当のソースコード
以下のようなソースコードを作成しました。
Apple LLVM version 8.1.0 (clang-802.0.42)で動作させてエラーが発生します。
parent_class.h
cpp
1using std::shared_ptr; 2class ParentClass:public std::enable_shared_from_this<ParentClass> 3{ 4public: 5 ~ParentClass(); 6 void method1(); 7}
parent_class.cpp
cpp
1#include "parent_class.h" 2ParentClass::~ParentClass() 3{ 4} 5void ParentClass::method1(){ 6 // 何らかの処理 7}
child_class.h
cpp
1#include "parent_class.h" 2using std::shared_ptr; 3class ChildClass:public ParentClass, public std::enable_shared_from_this<ChildClass> 4{ 5public: 6 ~ChildClass(); 7 void method2(); 8}
child_class.cpp
cpp
1#include "child_class.h" 2ChildClass::~ChildClass() 3{ 4} 5void ChildClass::method2() 6{ 7 // 何らかの処理 8}
main.cpp
cpp
1#include "parent_class.h" 2#include "child_class.h" 3int main(int argc, char *argv[]) 4{ 5 shared_ptr<ParentClass> pcPtr = std::make_shared<ChildClass>(); // エラー発生箇所 6}
ご利用中のC++コンパイラ名(gcc/clang/VisualC++など)と、正確なバージョンはわかりますか?
主題からは外れますが、enable_shared_from_this<T>からの継承は意図的でしょうか?現状のコード構造だと使い方が誤っています。
https://yohhoy.hatenadiary.jp/entry/20120314/p1
Apple LLVM version 8.1.0 (clang-802.0.42)を使っています。
enable_shared_from_this<T>からの継承は意図的というか、既存のソースコードがそうなっていたのでそのまま使っているという感じです。
すみません!
回答1件
あなたの回答
tips
プレビュー