私はこのプログラムをコンパイルして実行しようとしていますが、明らかに動作しません! leftaに** bottomは* leftaに変換できますか?彼らは間接のそのレベルで関係していないのでエラー: 'bottom **'から 'lefta **'への変換が無効
#include<iostream>
using namespace std;
class top
{
private:
int a;
public:
top(int b):a(b){}
virtual void output(){cout<<a<<endl;}
};
class lefta:virtual public top
{
private:
int b;
public:
lefta(int c,int d):top(c),b(d){}
void output(){cout<<b<<endl;}
};
class righta:virtual public top
{
private:
int c;
public:
righta(int c,int d):top(c),c(d){}
void output(){cout<<c<<endl;}
};
class bottom:public lefta,public righta
{
private:
int d;
public:
bottom(int e,int f,int g,int h):top(e),lefta(e,f),righta(e,g),d(h){}
void output(){cout<<d<<endl;}
};
int main()
{
bottom* bo=new bottom(1,2,3,4);
// lefta* le=bo;
// le->output();
bottom** p_bo=&bo;//here
lefta** p_le=p_bo;//here
(*p_le)->output();
return 0;
}
。とにかくポインターへのポインターを持ってはいけません。 –
より良い質問は、「ボトム*」が「レアナ*」に変換できるという理由だけで、「ボトム**」から「レアア**」にマジカルに当てはまるべきだと思いますか? –
真剣に関連しているのは、 '' T ** ' - ' 'const T **'変換についての質問です(http://kera.name/articles/2009/12/a-question-on-indirect-constness /)。 –