相关疑难解决方法(0)

为什么禁止在后续的私有派生类中简单提及基指针/引用?

struct B {};
struct D : private B {
  B* fun () { return new D; }  // ok
}
struct DD : public D {
  B* foo () { return 0; } // error: ‘struct B B::B’ is inaccessible !
};
Run Code Online (Sandbox Code Playgroud)

这个错误对我来说似乎不合理.如果我们可以B*在全局范围内使用简单,那么为什么不在其私有派生类中呢?g ++演示.

我们是不是要转换DD*B*,这是由语言规则(禁止这个,这个,这个是相关的问题).
需要注意的是,如果我改变B* foo()int foo(),事情的罚款.

c++ compiler-errors language-lawyer

14
推荐指数
2
解决办法
248
查看次数

将不可访问的私有基类型的指针传递给派生类方法

此代码示例将描述我发现非直观的语言功能.

class A {
public:
  A() {}
};

class B: private A
{
public:
  B() {}
};

class C: public B
{
public:
  C() {}
  void ProcessA(A* a) {
  }
};

int main() {
  C c;
}
Run Code Online (Sandbox Code Playgroud)

在Mac上使用Apple LLVM 4.2版编译此代码会产生一个

test.cc:16: error: ‘class A’ is inaccessible
test.cc:16: error: within this context
Run Code Online (Sandbox Code Playgroud)

更换void ProcessA(A* a)void ProcessA(::A* a)将使建立,但我不明白为什么我要在这里使用绝对类名.它是一种语言功能,可以避免某些错误,或者它只是一个黑暗的C++语法角,就像要求> >在与其他模板参数化的模板中的尖括号()之间放置空格.谢谢!

c++

13
推荐指数
1
解决办法
246
查看次数

标签 统计

c++ ×2

compiler-errors ×1

language-lawyer ×1