2016-05-15 1 views
0

にプライベートクラスmemersにアクセスします。は、私はスマートポインタクラスの以下のメンバーを持っているのctor

template< 
      typename T2, 
      typename = typename std::enable_if<std::is_base_of<T, T2>::value>::type 
    > 
    pointer(const pointer<T2>& ptr):local_type(ptr.local_type), local_raw_ptr(ptr.local_raw_ptr) {}; 

が、私はこれをコンパイルしようとする場合、私はこのエラーを取得:

pointer<Foo>::local_raw_ptr« is private within this context 

が、なぜ私がアクセスすることはできないのですが は、私はこのctorのを実装する基底クラスへの暗黙的なキャストを行うには、自クラス内のこのクラスのプライベートメンバーですか?そして、私はこの問題をどうやって解決できますか?

+0

これはヘッダファイルにあります – Exagon

+1

テンプレートctorとして、渡された 'ポインタ'は無関係のクラスになります。プライベートメンバは現在のクラスでアクセスできませんでした。 – songyuanyao

+1

あなたの質問は不明です。 MCVE(同じ問題を抱える小さくても完全なコードのサンプル)を与えてみてください。 'ポインタ'のメンバー関数は、 'ポインタ'と 'ポインタ'は異なる(親友ではない)クラスであるため、 'ポインタ'のメンバー関数は 'ポインタ'のプライベートメンバーにアクセスすることはできません。 「Y」は同じです。 – Peter

答えて

2

テンプレートクラスのインスタンス化はすべて、他のクラスとは異なるクラスです。

pointer<Foo>pointer<Bar>がある場合、2つの異なるクラスがあり、pointer<Foo>プライベートメンバーにはpointer<Bar>からアクセスできません。

local_typepointer<T2>には、pointer<T>コンストラクタからアクセスしようとしています。 T2Tのサブタイプであるという事実は無関係です。

関連する問題