"this"ポインタを使用せずにC++コードのベースクラスデータにアクセスしようとしています。私のクラスはテンプレート化されており、ClassA
はClassB
の基本クラスであり、ClassC
の基本クラスです。すべてのクラスは、その基底クラスから公開されます。ページは、私が文を「使用」と私の問題を解決することができるはず示唆テンプレート内のC++の名前解決サブクラスサブクラス
Why do I have to access template base class members through the this pointer?
を:私は途中ソリューションに私を取得し、この議論を見つけましたが、それを完全に解決しません。ここで私が何をしようとしています何の例です:
#include <iostream>
template <typename FP>
class ClassA
{
protected:
FP a ;
} ;
template <typename FP>
class ClassB : public ClassA <FP>
{
using ClassA <FP> :: a ;
public:
void fooB (void) { std:: cout << a << std::endl ; }
} ;
template <typename FP>
class ClassC : public ClassB <FP>
{
using ClassA <FP> :: a ;
public:
void fooC (void) { std:: cout << a << std::endl ; }
} ;
int main (int argc, char *argv[])
{
ClassB <double> tempB ;
ClassC <double> tempC ;
tempB.fooB () ;
tempC.fooC () ;
return 0 ;
}
上記のコードはコンパイルに失敗し、下のエラーを与える:私は何を見つけたことは「使用」は作ることです
stepTWO.cpp: In instantiation of ‘class ClassC<double>’:
stepTWO.cpp:30:25: required from here
stepTWO.cpp:8:12: error: ‘double ClassA<double>::a’ is protected
FP a ;
^
stepTWO.cpp:20:11: error: within this context
class ClassC : public ClassB <FP>
変数はでアクセス可能です。ClassB
または のいずれかでアクセス可能ですが、両方ではありません。両方のクラスにusingステートメントを置くと、上記のエラーが発生します。すべての継承はパブリック派生によって行われます。
誰もがこの作業を行うための解決策を知っていますか? (「この」または完全修飾スコープ名を使用してデータ要素にアクセスする以外)
'ClassB'でシンボル' protected'を作ろうとしましたか? –
@Someprogrammerdude - ありがとう!これらの提案が出るまで、私はそのようなことが「使用する」という点で重要であることを認識していませんでした。とても有難い! –