未在使用模板继承的作用域中声明的变量
variable not declared in scope using template inheritance
OMStatic.h
template<class Concept> class OMStaticArray :
public OMAbstructContainer<Concept> {
protected:
Concept *theLink;
int count;
void* AllocateMemory(int size);
bool ReleaseMemory(void* pMemory);
//...
};
OMCollec.h
template<class Concept> class OMCollection :
public OMStaticArray<Concept>{
public:
void add(Concept p) {
//...
> if (this->count >= size)
//...
}
在上面的代码中,类OMCollection是从OMStaticArray继承的,我的理解是,我们可以直接访问受保护的变量,但我得到一个错误"计数未在范围内声明"。如果我使用这个->计数错误不显示。为什么我面临这个错误,它曾经在VxWorks 5.5中编译,现在我迁移到Vxworks6.8,我面临这个错误,如果不使用"前缀"之前?这背后的原因是什么?请澄清。
谢谢!
这在c++ FAQ中有最好的解释:http://www.parashift.com/c++-faq-lite/templates.html#faq-35.19.
套用:
在
OMCollection<Concept>::add()
中,名称count
不存在取决于模板参数Concept
,因此将count
称为a nondependent名称。另一方面,OMStaticArray<Concept>
是依赖于模板参数Concept
,所以OMStaticArray<Concept>
与相关的名称。规则如下:编译器不会查找依赖的基类(如
OMStaticArray<Concept>
)查找非依赖名称时(如count
).
至于为什么在旧的编译器中编译,原因可能是旧的编译器不完全符合c++标准。
相关文章:
- 未在作用域中声明unordered_map
- 未在此作用域OpenCV3.4中声明cvSaveImage
- 未在此作用域中声明的函数和变量 (C++)
- 函数未在作用域中声明 / 如何结合使用 header.h、header.cpp 和 main.cpp?
- 重载时未在 C++ 的作用域错误中声明
- 在 C++ 中使用 "transform" 会给出一个错误,指出这未在作用域中声明
- Tictactoe 游戏变量未在作用域中声明
- 当变量在多个函数作用域中使用时,我应该在类 private 中声明该变量吗?
- 如何在C++中嵌套词法作用域可访问的作用域中声明静态信息?
- gets()未在作用域中声明
- 在C++14中,在哪个作用域中声明了重新声明枚举的非范围枚举器
- C++11 外部作用域变量声明为 auto
- 未在此作用域中声明类 (c++)
- 如何声明在函数作用域中定义的结构
- 未在此作用域中声明函数,即使存在头文件也是如此
- 变量声明中结构的作用域解析是什么意思
- 在C++中,在给定的相同作用域内声明相同的变量名
- 我可以使用相同的名称为周围作用域中的类型声明成员类型别名吗
- 类未在作用域中声明,但已声明该类
- 使用新的外部函数作用域声明和初始化变量