这个构造函数//怎么错了?

mirroatl239 2013-09-26 04:42:52


#include <iostream>
using namespace std;

class Base{
public:
Base(){}
Base(Base* p):Root(p){}
virtual void* CreateRoot(void* data)=0;
virtual void* CreateLeft(void* data)=0;
virtual void* CreateRight(void* data)=0;
Base* Root;
};

class Example:public Base{
public:
Example(){}
Example(void* ObjTempT=NULL):Left(NULL),Right(NULL),ObjTemp(ObjTempT),Base(NULL){}
Example* Left;
Example* Right;
void* ObjTemp;
};


int main(){

Base* execute = new Example;
Example obj;
return 0;
}
...全文
113 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
alex_s 2013-09-27
  • 打赏
  • 举报
回复
带有纯虚函数的基类不能实例化 所以Base* execute = new Example;会编译报错
sduxiaoxiang 2013-09-26
  • 打赏
  • 举报
回复

Example(){}
Example(void* ObjTempT=NULL)
冲突,去掉默认参数吧
sublimepan 2013-09-26
  • 打赏
  • 举报
回复
Example没有实现三个纯虚函数,所以仍然是抽象类,不能实例化。另,有个注意点,Example(){}这个构造函数多余。
图灵狗 2013-09-26
  • 打赏
  • 举报
回复
1、纯虚函数继承后是需要实现的; 2、Example(void* ObjTempT=NULL)可以缺省参数,与Example()是冲突的。

#include <iostream>
using namespace std;
 
class Base{
public:
    Base(){}
    Base(Base* p):Root(p){}    
    //virtual void* CreateRoot(void* data)=0;    
    //virtual void* CreateLeft(void* data)=0;
    //virtual void* CreateRight(void* data)=0;    
    Base* Root;
};
 
class Example:public Base{
public:
    Example(){}
    Example(void* ObjTempT):Left(NULL),Right(NULL),ObjTemp(ObjTempT),Base(NULL){}    
    Example* Left;
    Example* Right;
    void* ObjTemp;
};
 
 
int main(){    
 
    Base* execute = new Example;
    Example obj;
    return 0;
} 
引用 楼主 mirroatl239 的回复:


#include <iostream>
using namespace std;

class Base{
public:
	Base(){}
	Base(Base* p):Root(p){}	
	virtual void* CreateRoot(void* data)=0;	
	virtual void* CreateLeft(void* data)=0;
	virtual void* CreateRight(void* data)=0;	
	Base* Root;
};

class Example:public Base{
public:
	Example(){}
	Example(void* ObjTempT=NULL):Left(NULL),Right(NULL),ObjTemp(ObjTempT),Base(NULL){}	
	Example* Left;
	Example* Right;
	void* ObjTemp;
};


int main(){	

    Base* execute = new Example;
	Example obj;
	return 0;
} 
乃不知有汉 2013-09-26
  • 打赏
  • 举报
回复
“Example”: 指定了多个默认构造函数 “Example”: 不能实例化抽象类 “Example::Example”: 对重载函数的调用不明确 你得 CreateRoot 把这些纯虚函数实现了 Example(void* ObjTempT=NULL) --> Example(void* ObjTempT)

64,666

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧