在子类中实现纯虚方法
Posted
技术标签:
【中文标题】在子类中实现纯虚方法【英文标题】:Implementing pure virtual method in subclass 【发布时间】:2014-03-08 21:23:21 【问题描述】:我正在子类中从父类实现纯虚函数。
当我尝试在 Eclipse 中实例化子类时,它会说
“派生”类型必须实现继承的纯虚方法“Base::compareTo”
我很确定我这样做了。我的基类是..
base.h
#ifndef BASE_H_
#define BASE
class Base
public:
Base();
virtual ~Base();
virtual int compareTo(void* compare)=0;
;
#endif /* BASE*/
然后是我的derived.h
#ifndef DERIVED_H_
#define DERIVED_H_
#include "Base.h"
class Derived : public Base
public:
int x;
Derived(int y);
virtual ~Derived();
int compareTo(void* compare);
;
#endif /* DERIVED_H_ */
派生的.cpp
#include "Derived.h"
#include "Base.h"
Derived::Derived(int y)
// TODO Auto-generated constructor stub
x=y;
Derived::~Derived()
// TODO Auto-generated destructor stub
int Derived::compareTo(void* compare)
Derived* compared;
int result=0;
if(compared=dynamic_cast<Derived*>(compare))
if(x<compared->x)
result=-1;
else
result=1;
return result;
【问题讨论】:
你的错误信息是derived
,你的代码是Derived
(不同的拼写)。请发帖SSCCE!
您也不能动态投射 void*。我想你想要compareTo(Base* compare)
【参考方案1】:
我假设此消息来自 Eclipse 代码分析器,而不是来自您的编译器。代码分析器是错误的,你是对的。您已经从Derived
的基类中正确实现了纯虚方法。如果您尝试实例化 Derived,代码应该可以编译。
您的 CDT 版本可能低于 8.2.1 吗?如果是这样,您可能会遇到应该在 8.2.1 中修复的 this bug。
不过,您的代码中还有另一个错误。你不能 dynamic_cast 一个 void 指针。
【讨论】:
如何查看我的 CDT 版本? FAQ_How_do_I_find_out_what_plug-ins_have_been_installed【参考方案2】:试试这个基类代码:
#ifndef BASE_H_
#define BASE_H_
class Base
public:
//Base (); not needed in the virtual class
virtual ~Base() ;
virtual int compareTo(void* compare)=0;
;
#endif /* BASE*/
#ifndef DERIVED_H_
#define DERIVED_H_
#include "Base.h"
class Derived : public Base
public:
int x;
Derived(int y);
virtual ~Derived();
int compareTo(void* compare) override/*C++11*/;
;
#endif /* DERIVED_H_ */
#include "Derived.h"
//#include "Base.h" Not needed
Derived::Derived(int y)
// TODO Auto-generated constructor stub
x=y;
Derived::~Derived()
// TODO Auto-generated destructor stub
int Derived::compareTo(void* compare)
Derived* compared;
int result=0;
if(compared=dynamic_cast<Derived*>(compare))
if(x<compared->x)
result=-1;
else
result=1;
return result;
【讨论】:
以上是关于在子类中实现纯虚方法的主要内容,如果未能解决你的问题,请参考以下文章