参数类型为父类指针,我给子类指针,运行出错,怎么回事?

brk1985 2009-06-16 03:15:38
#include <stdlib.h>
//#include <windows.h>
#include <list>
#include <iostream>
#include <afxcoll.h>

using namespace std;

class CAge: public CObject
{
public:
int age;
CAge(int param){
age = param;
}
virtual ~CAge(){

}

};

void main(){
CObList* list = NULL;
POSITION pos;
CAge* age_20 = new CAge( 20 );
CAge* age_40 = new CAge( 40 );
CAge* age_60 = new CAge( 60 );
CAge* age_80 = new CAge( 80 );
list->AddHead( age_20 ); //VS2005运行出错,"Debug Assertion Failed!"
list->AddHead( age_40 );
list->AddHead( age_60 );
list->AddHead( age_80 );
while( ( pos = list->GetHeadPosition() ) != NULL )
{
cout<< pos << endl;
list->RemoveHead();

}
Sleep(10000);
delete list;

}


执行语句list->AddHead( age_20 );,出现问题
...全文
95 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
brk1985 2009-06-16
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 adventurelw 的回复:]
父类指针可以指向子类对象,但父类指针不是子类指针,之间不能隐式转换。
需要用dynamic_cast进行安全转换。或者直接强制转换也应该可以
[/Quote]

这种情况下不需要强制转换的吧?反过来才需要的吧。
goodname 2009-06-16
  • 打赏
  • 举报
回复
不知道你还想干什么,讨论的已经很清楚了吧。
brk1985 2009-06-16
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 jiao22220509 的回复:]
你的CObList* list = NULL;
是父类,,然后给里面插入了子类的信息,是不可以的,因为子类不但继承了父类的所有内容,还加入了自己的内容,也就是存储空间不一致造成的

你这里只能用子类的list来保存父类。。。

遵循一个规则:大的空间才能保存小的数据,,没有说小的能保存大的
[/Quote]

哈哈,发现了,不是这个问题。

AddHead的函数:POSITION AddHead(CObject* newElement);
我所问的是 这函数的参数指针是父类的,不是指CObList*是父类指针。链表list添加父类指针,内容少点;添加子类指针,内容丰富点。
goodname 2009-06-16
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 brk1985 的回复:]
“你的CObList* list = NULL;是父类,,然后给里面插入了子类的信息,是不可以的,因为子类不但继承了父类的所有内容,还加入了自己的内容,也就是存储空间不一致造成的”,1楼讲的没错呀!
但是我加了“new CObList();”之后,问题解决了。竟然没有出错???
[/Quote]

CObList存储的是指针,使可以的。如果存储对象,则不行。
adventurelw 2009-06-16
  • 打赏
  • 举报
回复
父类指针可以指向子类对象,但父类指针不是子类指针,之间不能隐式转换。
需要用dynamic_cast进行安全转换。或者直接强制转换也应该可以
brk1985 2009-06-16
  • 打赏
  • 举报
回复
“你的CObList* list = NULL;是父类,,然后给里面插入了子类的信息,是不可以的,因为子类不但继承了父类的所有内容,还加入了自己的内容,也就是存储空间不一致造成的”,1楼讲的没错呀!
但是我加了“new CObList();”之后,问题解决了。竟然没有出错???
Treazy 2009-06-16
  • 打赏
  • 举报
回复
[Quote=引用楼主 brk1985 的帖子:]
执行语句list->AddHead( age_20 );,出现问题
[/Quote]
list指向的内存都没分配合法空间
你至少不能让list指向NULL吧?


CObList* list = NULL;
//改成
CObList* list = new CObList();

goodname 2009-06-16
  • 打赏
  • 举报
回复
看起来应该是

CObList* list = NULL;


list = new CObList;

...
list->AddHead( age_20 ); //VS2005运行出错,"Debug Assertion Failed!"
list->AddHead( age_40 );
list->AddHead( age_60 );
list->AddHead( age_80 );
jiao22220509 2009-06-16
  • 打赏
  • 举报
回复
你的CObList* list = NULL;
是父类,,然后给里面插入了子类的信息,是不可以的,因为子类不但继承了父类的所有内容,还加入了自己的内容,也就是存储空间不一致造成的

你这里只能用子类的list来保存父类。。。

遵循一个规则:大的空间才能保存小的数据,,没有说小的能保存大的

64,676

社区成员

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

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