相关疑难解决方法(0)

为什么拥有私有基类的声明会使类型名称无法访问?

令我感到惊讶的是,在下面的示例中,声明Middle的基类private使该名称在后续派生中不可用作为类型.

class Base {
public:
  Base(Base const& b) : i(b.i) {}

  int i;
};

class Middle : private Base {            //<<<<<<<<<<<
public:
  Middle(Base const* p) : Base(*p) {}
};

class Upper : public Middle {
public:
  Upper(Base const* p) : Middle(p) {}    //<<<<<<<<<<<
};
Run Code Online (Sandbox Code Playgroud)

用g ++编译(Debian 6.3.0-18 + deb9u1)6.3.0 20170516 ......

g++ -std=c++11 privateBase.cpp
Run Code Online (Sandbox Code Playgroud)

我得到以下诊断:

privateBase.cpp:15:9: error: ‘class Base Base::Base’ is inaccessible within this context
   Upper(Base const* p) : Middle(p) {}
         ^~~~
privateBase.cpp:1:12: note: declared here
 class Base {
            ^ …
Run Code Online (Sandbox Code Playgroud)

c++ injected-class-name

10
推荐指数
1
解决办法
202
查看次数

标签 统计

c++ ×1

injected-class-name ×1