這是我的第一個問題,我希望我做的一切都是正確的。C++無法從派生類中調用基類方法
我嘗試從boost元組中派生一個類。 Boost的元組提供了一個get()模板方法來訪問各個字段。有趣的是,我不能使用派生類中的方法。
下面的代碼顯示問題:
#include <iostream>
#include <boost/tuple/tuple.hpp>
using namespace std;
template<typename A>
class Derived : public boost::tuple<A>
{
public:
Derived() : boost::tuple<A>() {}
A& getVal0()
{
return get<0>();
// does not compile:
//error: 'get' was not declared in this scope
return boost::tuple<A>::get<0>();
// does not compile
//error: expected primary-expression before ')' token
return boost::tuples::get<0>(*this);
//works
}
};
int main() {
Derived<int> a;
a.get<0>() = 5;
cout << a.get<0>() << endl;
cout << a.getVal0() << endl;
return 0;
}
我不知道爲什麼我可以從主功能
a.get<0>() = 5;
但不能從A& getVal0()
方法中訪問get<0>()
方法:
error: 'get' was not declared in this scope
第二個迴歸線是我的嘗試sc OPE方法調用基類:
return boost::tuple<A>::get<0>();
這產生不同的錯誤
error: expected primary-expression before ')' token
調用外部函數'的boost ::元組::獲得< 0>(*此)的作品。這個解決方法對我來說沒問題。但我仍然想知道爲什麼我現在不能使用元組方法。
在升壓文件是Visual C++
提示的通知! MS Visual C++編譯器不支持成員獲取函數。此外,編譯器在找到非成員get函數時沒有明確的命名空間限定符。因此,在編寫應使用MSVC++ 6.0進行編譯的代碼時,所有獲取調用應該被限定爲:tuples :: get(a_tuple)。
但是我使用GCC 4.5.2 & 4.8.1
在此先感謝
+1我必須這樣說:除了標的物之外,您的問題應作爲本網站上發佈的任何新用戶的示例。 (1)你認爲你有的問題,(2)展示這個問題的示例代碼,(3)試圖解決問題,(4)每個人的每個結果嘗試,(5)你使用的工具,包括版本信息,以及(6)研究你認爲根本問題可能是什麼。對於一般的職位來說,這很棒;對於一個*第一*郵政來說,它非常出色,很少見到這種交付。 – WhozCraig
WhozCraig這是非常好的,你可以給一個初學者這麼多好話和積極的建議 – 4pie0
@piotruś當這樣的問題發佈時不難。我很死 - 認真對待這個模範。我只希望OP知道如何標記解決方案,因爲我非常確定Dietmar有這個解決方案。 = P – WhozCraig