0

クラスA、Bがあります.Bは保護されたAから派生するため、BからAへの暗黙的なキャストを有効にするために、キャスト演算子を追加しましたが、暗黙的に使用するとエラーが発生します(明示的に使用するとすべて問題ありません)。

このコードを機能させるには??

class A
{
public:
  int a;
};


class B : protected A {
public:
  int b;
  operator const A&()const { return *this; }
};

B b;
const A& a = b; // ERROR: error C2243: 'type cast' : conversion from 'const b *' to 'const A &' exists, but is inaccessible

キャストを暗黙的にする方法は?

4

3 に答える 3

0

明らかに、型変換演算子は B で定義されているため、型 A のオブジェクトでは使用できません。あなたがしようとしていることは C++ では不可能です。これは、'this' ポインターが定数ポインターであるためです。したがって、A の本体内に次のコードを記述しようとすると、機能しません。 A(B* b) { this = b;//error, 'this' pointer is a constant pointer. }

つまり、型 A の参照が型 B のオブジェクトを参照するように暗黙的に設定することはできません。せいぜい、再解釈キャストを試して、それが機能するかどうかを確認できます。

于 2013-07-23T13:22:06.773 に答える
0

OK - 別の設計を選択したので、継承の代わりに構成を使用します。このようにして、保護されたインスタンス A を定義できます

class B {
protected:
  A a;
public
  operator const A&()const { return a; }
};

B b;
const A& a = b;
于 2013-07-23T14:00:05.907 に答える