C++ C++&引用;未在此范围内声明;在派生类中重写纯虚方法时
以下是我需要做的:C++ C++&引用;未在此范围内声明;在派生类中重写纯虚方法时,c++,templates,inheritance,scope,overriding,C++,Templates,Inheritance,Scope,Overriding,以下是我需要做的: #include <iostream> using namespace std; c
#include <iostream>
using namespace std;
class A
{
public :
virtual void fa() = 0;
};
template <typename type>
class B : public A
{
protected :
int v_b;
};
template <typename type>
class C : public B<type>
{
public :
void fa()
{
// whatever action that try to access v_b
cout << "v_b = " << v_b << endl;
}
};
int main()
{
C<int> toto;
toto.fa();
return 0;
}
我不明白为什么v_b变量不在范围内。这是我使用模板的一个问题吗
有人能帮我解决这个问题吗
thx
编辑:
我试着按照建议使用这个->v_b或b::v_b,效果很好!感谢您在表达式中的帮助:
cout << "v_b = " << v_b << endl;
现在它是一个依赖表达式(
this
,这显然取决于实例化类型),查找被延迟到第二阶段,在第二阶段替换类型并检查基数。可能的重复或this->v_b
将修复代码。@CharlesBailey的链接解释了原因。您使用的是较旧版本的g++吗?gcc版本4.6.3(Ubuntu/Linaro 4.6.3-1ubuntu5)(sry如果你在我抑制“第二种技术”不起作用的部分之前回答了,那是另一个不相关的错误)thx链接感谢快速回答,甚至比我的编辑更快!我试着朝那个方向看,但我仍然有一些我不理解的问题。你能看看发生了什么事吗?非常感谢你的帮助不,你说得对!当我尝试测试不同的解决方案时,尽管看起来很绝望,但我在编辑时留下了一个“模板类C:public B{”!谢谢你指出这一点!我现在可以睡觉了;)
test.cpp: In member function ‘void C<type>::fa()’:
‘void A::fa()’:
cout << "v_b = " << v_b << endl;
cout << "v_b = " << this->v_b << endl;