C++ 嵌套类继承 模板 阶级基础 { 类嵌套类 { T位; }; 类derivedClass:公共基::nestedClass { 虚无乐趣(){ pos=pos+5;//错误:pos未在此范围内声明 } }; };
必须显式引用为base::nestedClass::pos[或使用using语句]您没有将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节规定 在类模板或类模板成员的定义中,如果类模板的基类依赖于模板参数,则在类模板或成员的定义点或类模板或成
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
}
};
};