类的继承中的一个错误
来源:互联网 发布:服装erp软件xyerp 编辑:程序博客网 时间:2024/05/22 14:50
基类
template<class T>class mstack{public:virtual bool mpush(T)=0;virtual bool mpop(T&)=0;virtual bool misEmpty()=0;};
派生类1
template <class T>class s1:public mstack<T>{public:T data;int top;T* st;int msize;public:s1(int len);~s1();};
派生类2
template<class T>class s2:public mstack<T>{public:int top;T* st;int msize;T data;public:s2(int len);~s();};
两个派生类都实现了基类的虚函数,结果出现编译错误
error C2995: 'bool mstack<T>::mpush(T)' : function template has already been defined error C2995: 'bool mstack<T>::mpop(T &)' : function template has already been definederror C2995: 'bool mstack<T>::misEmpty(void)' : function template has already been defined
尝试1:
在两个派生类中重新声明一下虚基类的函数
尝试2:
去掉一个派生类
这两种都不会再出现编译错误
总结一下继承时出现的一些错误:
1.基类中函数不是虚函数时:在基类中不必有函数实现,编译器不会报错
(1)如果有两个或两个以上的派生类,覆盖(不能叫覆盖应该叫隐藏)时,至少要在其中一个派生类中重新声明函数,否则报错:
error C2995: 'bool mstack<T>::mpush(T)' : function template has already been defined
(2)如果只有一个派生类,在派生类中实现时必须声明,否则编译报错
error C2509: 'mpush' : member function not declared in 's1<T>'
2.基类中函数为虚函数时:
①若不是纯虚函数,在基类中必须有实现,否则报错:
无法解析的外部符号
②若是纯虚函数,在基类中不必有实现版本
③纯虚函数覆盖时必须在派生类中重新声明
总之如果派生类想覆盖或隐藏基类函数,派生类中都需有声明
0 0
- 类的继承中的一个错误
- 一个类继承的错误
- 类继承中的一个知识点
- 一个java继承容易犯的错误
- 一个继承JFrame的类调用一个继承JPanel的类,继承JPanel中的定义JPanel不显示
- Ruby中的继承的一个问题
- 继承在实体类中的一个应用
- 一个类继承的问题
- 一个类的继承例子
- 一个不能继承的类
- 类的继承引起的一个错误:error C2259 cannot instantiate abstract class due to following members
- 类的继承引起的一个错误:error C2259 cannot instantiate abstract class due to following members
- Mybatis 中的一个错误
- Mybatis 中的一个错误
- 关于静态成员变量在类继承中的一个误区
- 关于静态成员变量在类继承中的一个误区
- 递归类继承错误
- java 类的继承(继承中的关键字)
- ssh中个jar包的含义
- 《Linux Device Drivers》 第七章 时间、延时及延缓操作——note
- Ubuntu 安装 Jexus 5.4
- 类似thinkphp的三大自动
- 《Linux Device Drivers》第八章 分配内存——note
- 类的继承中的一个错误
- Android中软解码和硬解码的优先级
- 对话:在敏捷中,是否可以仍然用需求来替代用户故事?
- windows基础
- spring AOP使用
- 《Linux Device Drivers》 第九章 与硬件通信
- XPATH Injection
- 链表完整版
- [Network]数据链路层