-1

今、私は以下のコードを持っています:

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 &' への変換が存在しますが、アクセスできません。

私の意見では、プライベート ヘリットを使用する場合は関係がないため、エラーを表示するのは正しいことです。しかし、最初のコード パターンはうまく機能します。なぜだろう?

4

3 に答える 3