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这是什么原因?请澄清。
谢谢!
答案 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 ++标准。