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

問題は、構造体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 privateからlyを継承させています、そしてそれはあなたがを構築することができないことを意味します。BA<B>B::BprivateC

于 2012-02-10T05:32:03.350 に答える