我在模板类之间的继承方面遇到了一些麻烦。我从一个简单的代码开始,该代码具有父类和继承该父类的子类。子类能够访问父类的受保护数据成员。
#include <iostream>
using namespace std;
# define LENGTH 10
class Parent {
protected:
int * array[LENGTH] = {NULL};
};
class Child : public Parent {
public:
void addItem(int * item) {
for (int i = 0; i < LENGTH; i++) {
if (array[i] == NULL) {
array[i] = item;
}
}
}
};
int main() {
Child obj;
int *temp = new int(5);
obj.addItem(temp);
}
这编译并运行得很好。但后来我尝试用模板类做同样的事情。
#include <iostream>
using namespace std;
# define LENGTH 10
template <typename T>
class Parent {
protected:
T * array[LENGTH] = {NULL};
};
template <typename T>
class Child : public Parent<T> {
public:
void addItem(T * item) {
for (int i = 0; i < LENGTH; i++) {
if (array[i] == NULL) {
array[i] = item;
}
}
}
};
int main() {
Child obj;
int *temp = new int(5);
obj.addItem(temp);
}
第二个程序无法编译,我收到的错误是:&#39; array&#39;在这方面没有申明。我不知道为什么模板类会改变继承的工作方式。除了父类中的公共get / set方法之外,有没有办法像这样使用继承?