6

有人可以向我解释以下编译器错误:

struct B
{
};

template <typename T>
struct A : private T
{
};

struct C : public A<B>            
{                                                                             
    C(A<B>);   // ERROR HERE
};

指示行的错误是:

test.cpp:2:1: error: 'struct B B::B' is inaccessible
test.cpp:12:7: error: within this context

究竟什么是不可访问的,为什么?

4

3 回答 3

6

尝试A< ::B>A<struct B>

在里面C,不合格的引用B会拾取所谓的注入类名,它是通过基类引入的A。由于A从 私有继承B注入的类名也随之而来,并且也是私有的,因此无法访问C.

改天,另一种语言怪癖...

于 2012-02-10T05:35:14.673 回答
4

问题是 struct B 的名称屏蔽。一探究竟:

struct B{};

struct X{};

template <class T>
struct A : private T
{};

struct C : public A<B>
{
    C(){
          A<X> t1;     // WORKS
 //       A<B> t2;     // WRONG
          A< ::B> t3;  // WORKS
    }   
};

int main () {
}
于 2012-02-10T05:44:26.187 回答
-1

当你这样做时,你正在A privately 继承,这意味着你不能构造一个.BA<B>B::BprivateC

于 2012-02-10T05:32:03.350 回答