背景
cppで親クラスが共有する先祖(祖父母)クラスの継承時のエラー解消に戸惑ったので、対応方法を記事に残します。共有する先祖クラスをvirtualで継承
下記のように親クラスでの先祖クラス継承時にvirtualを付与すればambiguosエラーを回避して実行できます。class ParentA : virtual public GrandParent {};
class ParentB : virtual public GrandParent {};動くコード全体を示すとこうです。
#include <iostream>実行すると期待通りにanbiguosエラーを回避しつつ先祖クラスの実装内容を受け取れました。
class GrandParent {
public:
int fnGrandParent() { return 99; }
};
class ParentA : virtual public GrandParent {};
class ParentB : virtual public GrandParent {};
class Bundled : public ParentA, public ParentB {};
int main(int argc, char** argv) {
Bundled bundled;
printf("fnGrandParent(): %d\n", bundled.fnGrandParent());
}
fnGrandParent(): 99
動作環境
g++: (Ubuntu 13.3.0-6ubuntu2~24.04.1) 13.3.0(gccコマンドでは undefined reference to `vtable for __cxxabiv1::__vmi_class_type_info' というエラーが発生してビルド不能だったので、g++を使うのが良いです。)
おわり
クラスの参照重複の解決方法が分かって良かったです。参考
Under multiple inheritance, what happens if the same member name appears in two different base classes?上記記事に対するAadhithya Sankar氏の回答

0 件のコメント :
コメントを投稿