Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/155.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++ 嵌套类继承 模板 阶级基础 { 类嵌套类 { T位; }; 类derivedClass:公共基::nestedClass { 虚无乐趣(){ pos=pos+5;//错误:pos未在此范围内声明 } }; };_C++_Templates_Class_Nested - Fatal编程技术网

C++ 嵌套类继承 模板 阶级基础 { 类嵌套类 { T位; }; 类derivedClass:公共基::nestedClass { 虚无乐趣(){ pos=pos+5;//错误:pos未在此范围内声明 } }; };

C++ 嵌套类继承 模板 阶级基础 { 类嵌套类 { T位; }; 类derivedClass:公共基::nestedClass { 虚无乐趣(){ pos=pos+5;//错误:pos未在此范围内声明 } }; };,c++,templates,class,nested,C++,Templates,Class,Nested,必须显式引用为base::nestedClass::pos[或使用using语句]您没有将pos纳入范围。您可以使用this->pos+=5或使用nestedclass::posC++03[第14.6/8节]说 在查找模板定义中使用的名称声明时,通常的查找规则(3.4.1、3.4.2)用于非从属名称。依赖于模板参数的名称的查找将推迟,直到知道实际的模板参数(14.6.2) 第14.6.2/3节规定 在类模板或类模板成员的定义中,如果类模板的基类依赖于模板参数,则在类模板或成员的定义点或类模板或成

必须显式引用为base::nestedClass::pos[或使用using语句]

您没有将pos纳入范围。您可以使用
this->pos+=5
使用nestedclass::pos

C++03[第14.6/8节]说

在查找模板定义中使用的名称声明时,通常的查找规则(3.4.1、3.4.2)用于非从属名称。依赖于模板参数的名称的查找将推迟,直到知道实际的模板参数(14.6.2)

第14.6.2/3节规定

在类模板或类模板成员的定义中,如果类模板的基类依赖于模板参数,则在类模板或成员的定义点或类模板或成员的实例化过程中,在非限定名称查找期间不会检查基类范围

pos
是非依赖名称,因此不检查基类

所以你有两个选择

  • 使用成员的完全限定名,即
    base::nestedClass::pos
  • 使用
    this->pos

语法错误太多了。对不起,我刚刚简化了代码。请复制并粘贴您的真实代码。很明显,您遗漏了很多代码,而您遗漏的一些内容可能对确定到底是什么错误很重要。创建一个可编译(或您认为应该编译)但仍能演示问题的最小示例。Sean的可能副本,感谢您粘贴真实代码,但我说的是一个最小示例。复制“未在此范围内声明”错误消息所需的代码比实际需要的代码多得多。事实上,这段代码看起来甚至不像您开始时遇到的问题。在人们已经开始回答问题后,请不要改变问题的目的。它把旧的答案变成了废话。看看这是不是一个骗局,发表评论,人们会投票决定结束(可能会投票决定你的另一个答案)。@Prasoon:true。。。当你的评论出现的时候,我正在修正它。
template<class T>
class base
{
    class nestedClass
    {
       T pos;
    };
   class derivedClass:public base<T>::nestedClass
     {
       void fun(){
         pos = pos +5; // error: pos is not declared in this scope
        }
     };   

};