我正在尝试实现一个从抽象类型继承的List继承的数据结构。我正在遵循《 C ++之旅》一书中的指南。 不幸的是,我的代码没有编译,我遇到了类似的问题,但是问题有所不同,我只使用一个.cc文件,没有标题,没有任何东西,只是一个简单的测试。
编辑:List<T>
就像我从类模板继承的那样。
template <class T>
class List {
public:
virtual int size()=0;
virtual T get(int)=0;
virtual void set(int,T)=0;
virtual void add(T)=0;
virtual void remove(int)=0;
};
template<class T>
class ArrayStack : public List {
public:
ArrayStack(){
len = 0;
}
void add(T e){
a.push_back(e);
len++;
}
T get(int idx){
return a[idx];
}
void set(int idx,T e){
a[idx] = e;
}
int size(){
return len;
}
void remove(int idx){
a.erase(a.begin()+idx);
}
~ArrayStack(){}
private:
std::vector<T> a;
int len;
};
template <class T>
void print_list(List<T>& l){
for(auto i=0;i < l.size();i++){
std::cout << l.get(i) << std::endl;
}
}
int main(){
ArrayStack<int> m;
m.add(1);
m.add(2);
m.add(3);
print_list(m);
}
编译错误:
list.cc:28:32: error: expected class-name before ‘{’ token
class ArrayStack : public List {
答案 0 :(得分:0)
基础必须始终是类。 List
不是课程。这是一个类模板。无法从模板继承。
类模板的实例,例如List<T>
,是。我怀疑您可能打算以此为基础。