我想在不使用“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
或ClassC
可访问的变量,但不是两者。如果我在两个类中都使用using语句,则会出现上面显示的错误。所有继承都是通过公共派生来完成的。
有谁知道一个解决方案,使这项工作? (除了使用“这个”或完全合格的范围名称来访问我的数据元素?)
你有没有试过在'ClassB'中使符号'protected'? –
@Someprogrammerdude - 谢谢!在这些建议之前,我没有意识到这种事情在“使用”方面至关重要。非常感激! –