使用模板继承未在范围中声明的变量

时间:2011-09-20 08:07:23

标签: c++

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我面临这个错误,如果不使用“前缀”之前呢? behnind这是什么原因?请澄清。

谢谢!

1 个答案:

答案 0 :(得分:3)

最好在C ++ FAQ中解释:http://www.parashift.com/c++-faq-lite/templates.html#faq-35.19

用来解释:

  

OMCollection<Concept>::add()内,名称count没有   取决于模板参数Concept,因此count被称为a   非依赖名称。另一方面,OMStaticArray<Concept>是   取决于模板参数Concept所以OMStaticArray<Concept>   被称为依赖名称

     

这是规则:编译器不查看依赖的基类   (如OMStaticArray<Concept>)查找非依赖名称时   (如count)。

至于为什么在较旧的编译器中编译,原因可能是较旧的编译器不完全符合C ++标准。