我试图在不使用“this”指针的情况下访问我的 C++ 代码中的基类数据。我的类是模板化的,并且ClassA
是 的基类ClassB
,它是ClassC
. 所有类都是从它们的基类公开派生的。我发现这个讨论让我获得了一半的解决方案,但并没有完全解决它:
该页面表明我应该能够使用“使用”语句解决我的问题。这是我正在尝试做的一个例子:
#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
中 ClassC
访问,但不能在两者中访问。如果我将 using 语句放在两个类中,我会得到上面显示的错误。所有继承都是通过公共派生完成的。
有谁知道使这项工作的解决方案?(除了使用“this”或完全限定的范围名称来访问我的数据元素?)