【发布时间】:2012-05-30 22:13:44
【问题描述】:
以下代码无法编译 - 使用了未声明的标识符。我使用 GCC 和 XCode 进行编译。
所有内容都在一个头文件中。
include "MyArray.h"
template <typename T>
class MyBase {
public:
MyBase();
virtual ~MyBase();
void addStuff(T* someStuff);
protected:
MyArray<T*> stuff;
};
template <typename T>
MyBase<T>::MyBase() {}
template <typename T>
MyBase<T>::~MyBase() {}
template <typename T>
void MyBase<T>::addStuff(T* someStuff) {
stuff.add(someStuff);
}
// ---------------------
template <typename T>
class MyDerived : public MyBase<T> {
public:
MyDerived();
virtual ~MyDerived();
virtual void doSomething();
};
template <typename T>
MyDerived<T>::MyDerived() {}
template <typename T>
MyDerived<T>::~MyDerived() {}
template <typename T>
void MyDerived<T>::doSomething() {
T* thingy = new T();
addStuff(thingy); //here's the compile error. addStuff is not declared.
}
有人解释一下吗? 提前致谢!
【问题讨论】:
-
@jua 你肯定需要查找有关不合格名称的受诅依赖的基本查找规则。你说的是不正确的。符合标准的编译器将需要它。
标签: c++ templates inheritance