错误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。因此派生类必须实现这个函数, 如果派生类没有实现这个函数,则这个派生类也是抽象的。抽象类为什么不能实例化对象: 因为抽象类中包含有没有定义的函数,因此不能用抽象类来实例化对象。 但可以声明抽象类的指针指向派生类。
抽象类:就是包含有未定义的虚函数的类,也就是说只在类中声明了一个抽象类,但没有具体定义,或者把虚函数定义为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); //求两个表的交集
};
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
- 错误1error C2259: “LinearList<T>”: 不能实例化抽象类e:\datastructure\cap_1\cap_1\linearlist.h
- 错误:error C2259:“CxxDlg”:不能实例化抽象类
- 抽象类linearList
- LinearList
- 数据结构----作业1--LinearList
- C++ LinearList 线性表
- 线形表 LinearList
- 关于“不能实例化抽象类“错误的解决办法
- 数据结构与算法(一)LinearList ADT
- 线性表LinearList的创建与使用
- 抽象类不能实例化
- 6.7.1 Oops—错误地调用了C r e a t e T h r e a d
- 类的继承引起的一个错误:error C2259 cannot instantiate abstract class due to following members
- 类的继承引起的一个错误:error C2259 cannot instantiate abstract class due to following members
- java抽象类不能实例化&实践是检验真理的唯一标准
- 抽象类不只是不能实例化
- 不能实例化抽象类的浅尝
- 不能实例化抽象类 是什么原因?
- 数组进制转换的表格形式优化
- Netty线程模型之客户端线程模型
- mysql基本语法总结篇
- The Heaviest Non-decreasing Subsequence Problem
- 超级简单的retrofit使用自签名证书进行HTTPS请求的教程
- 错误1error C2259: “LinearList<T>”: 不能实例化抽象类e:\datastructure\cap_1\cap_1\linearlist.h
- VMware虚拟机Linux桥接模式访问外网配置(补充)
- 搭建静态网页-day8-个人学习笔记
- WebService实践(一)
- bzoj 2733 [HNOI2012]永无乡 并查集+平衡树
- Spring Cloud 微服务实战——第1章 基础知识
- LAMP环境简单搭建
- 用HTML5实现手机摇一摇的功能并配上声音
- 交互式网页应用的网页开发技术Ajax简单介绍