未在使用模板继承的作用域中声明的变量

variable not declared in scope using template inheritance

本文关键字:作用域 声明 变量 继承      更新时间:2023-10-16
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++标准。