Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/154.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++&引用;未在此范围内声明;在派生类中重写纯虚方法时_C++_Templates_Inheritance_Scope_Overriding - Fatal编程技术网

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;