今、私は以下のコードを持っています:
class Env
{
public:
int ra(){ return a;}
int rb(){ return b;}
private:
int a;
int b;
};
class CEnv: private Env
{
public:
static Env* Instance()
{
CEnv* pEnv = new CEnv;
return pEnv;
}
};
int _tmain(int argc, _TCHAR* argv[])
{
Env* pEnv = CEnv::Instance();
pEnv->ra();
return 0;
}
後でコードを追加します。
class Env
{
public:
int ra(){ return a;}
int rb(){ return b;}
private:
int a;
int b;
};
class CEnv: private Env
{
public:
static Env* Instance()
{
CEnv* pEnv = new CEnv;
return pEnv;
}
};
Env* test()
{
CEnv *p = new CEnv;
return p;
}
int _tmain(int argc, _TCHAR* argv[])
{
Env* pEnv = CEnv::Instance();
pEnv->ra();
return 0;
}
次に、VS2010 はコンパイラ エラーを通知します: エラー C2243: '型キャスト': 'CEnv *' から 'Env &' への変換が存在しますが、アクセスできません。
私の意見では、プライベート ヘリットを使用する場合は関係がないため、エラーを表示するのは正しいことです。しかし、最初のコード パターンはうまく機能します。なぜだろう?