从派生*到基地*的转换存在,但无法访问

为什么下面的代码会产生这个错误,即使c是一个结构,默认情况下有一个公共inheritance?

struct c { protected: int i; public: c(int ii=0):i(ii){} virtual c *fun(); }; c* c::fun(){ cout<<"in c"; return &c(); } class d : c { public: d(){} d* fun() { i = 9; cout<<"in d"<<'\t'<<i; return &d(); } }; int main() { c *cc; d dd; cc = &dd; cc->fun(); } 

你需要:

 class d : public c 

classinheritance默认是private的。

当你从一个class或一个struct私下inheritance,你明确地说,除了别的以外,直接从派生types转换为基types是不可能的。