错误1error C2259: “LinearList<T>”: 不能实例化抽象类e:\datastructure\cap_1\cap_1\linearlist.h

来源:互联网 发布:淘宝页面背景图制作 编辑:程序博客网 时间:2024/06/06 10:54

错误 1 error C2259: “LinearList<T>”: 不能实例化抽象类 e:\datastructure\cap_1\cap_1\linearlist.h 22 1 Cap_1

  数据结构中经常会报上面的错误,就是在自己信心满满测试自己写好的继承的抽象基类的时候,在main函数中定义对象的时候竟然报错,通过这篇文章,希望大家都能解决并记住!
根本原因是违背了C++的语法,用抽象类实例化对象,具体原因,这是我在网上找到的相关资料:

抽象类的概念:
抽象类:就是包含有未定义的虚函数的类,也就是说只在类中声明了一个抽象类,但没有具体定义,或者把虚函数定义为virtual void f()=0;这样的形式。注意函数后有一个=0。因此派生类必须实现这个函数, 如果派生类没有实现这个函数,则这个派生类也是抽象的。抽象类为什么不能实例化对象:  因为抽象类中包含有没有定义的函数,因此不能用抽象类来实例化对象。 但可以声明抽象类的指针指向派生类。
说直接点就是,你用的类继承了一个抽象基类,类似于下面这种:
class LinearList {
public :
 LinearList();//构造函数
 ~LinearList();//析构函数
 virtual int linearListSize() const = 0;   //求最大体积
 virtual int linearListLength() const = 0;  //求表的长度
 virtual int searchElement(T & x) const = 0;  //查找表中的元素
 virtual int locateElement(int i) const = 0;  //定位表中的元素
 virtual bool getData(int i, T & x) const = 0; //的到表中的数据
 virtual void setData(int i, T & x) = 0;   //设置表中的数据
 virtual bool insertElement(int i, T & x) = 0; //向表中插入数据
 virtual bool removeElement(int i, T & x) = 0; //从表中删除数据
 virtual bool isEmpty() const = 0;    //判断表是否为空
 virtual bool isFull() const = 0;    //判断表是否已满
 virtual void Sort() = 0;      //对表中元素正向排序
 virtual void Input() = 0;      //输入
 virtual void Output() = 0;      //输出
 virtual LinearList<T> operator=(LinearList<T> & L) = 0;
 //自己补充的成员函数
 virtual void reverseSort();      //对表中元素反向排序
 virtual void andSetTogether(LinearList<T> & L); //求两个表的并集
 virtual void intersection(LinearList<T> & L);  //求两个表的交集
};
但是你在继承他的时候(比如:class LinkNode : public LinearList<T>)LinkNode这个class并没有把这个抽象基类的所有函数定义(一个字母不同都不行),所以系统认为你这个自以为是派生的具体类还是个抽象类,而抽象类是不能够实例化对象的,所以就报出此错误。
解决方式有两个 : 1、不要继承此抽象类了,初级阶段影响并不大。2、把抽象类中的所有成员函数都在继承类中给出定义。图片中不再继承头文件中的抽象基类,不再报错。
相关链接:http://wenda.so.com/q/1371332758060937
阅读全文
1 0