这是我的第一个问题,我希望我做的一切都是正确的。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