我想在不使用「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 - 謝謝!在這些建議之前,我沒有意識到這種事情在「使用」方面至關重要。非常感激! –