无法为有抽象类型‘EventLoopThread’的对象分配内存
问题背景:
今天在写服务器的时候遇到了这样一个问题,一个子类对象无法分配内存,它继承的基类有两个纯虚函数图如下:
IRun.h:
class IRun0
{
public:
virtual void run0() = 0;
virtual void run1() = 0;
};
可以看到,run0
和 run1
为两个纯虚函数。IRun0 的一个子类继承该类,如下:
EventLoopThread.h:
class EventLoopThread : public IRun0
{
public:
void run0();
};
此时报的错误是:
错误:无法为有抽象类型‘EventLoopThread’的对象分配内存
后来查找了半天,突然想到 IRun0 类中还声明了一个纯虚函数 run1
,如果子类EventLoopThread
不对 run1
进行重新声明的话,就直接把纯虚函数给继承了过来,所以这个时候该类就是一个抽象类型,无法为其分配内存,于是通过下面完美解决:
class EventLoopThread : public IRun0
{
public:
void run0();
void run1() {};
};