Теперь у меня есть код ниже:частного наследования и возвращающие ссылки из функций
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;
}
И это работает well.Later добавить некоторый код.
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 &' существует, но недоступна.
На мой взгляд, это правильно, чтобы показать ошибку, потому что это не так - отношения, если вы используете частное herit. Но первый код работает хорошо. И мне интересно, почему?
«И это хорошо работает». Нет, это не так. – curiousguy
В моем vs2010 это действительно работает. И какая ошибка отображается на вашем компьютере? – xingfu0539
* Где * вы получаете сообщение об ошибке? На какой линии? Не могли бы вы отметить это замечанием? Я даже не вижу, чтобы вы использовали указатели использования для «CEnv». –