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

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 );,出现问题
...全文
141 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来保存父类。。。

遵循一个规则:大的空间才能保存小的数据,,没有说小的能保存大的
内容概要:本文提出了一种针对电动汽车集群并网的分布式鲁棒优化调度模型,旨在应对大规模电动汽车接入电网所带来的不确定性与调度复杂性。该模型采用分布式优化框架,结合鲁棒优化理论,有效处理由用户行为、充电需求及可再生能源出力等多重不确定性因素引起的调度风险。通过构建考虑电池损耗、用户响应意愿及电网约束的多目标优化问题,实现了在保证电网运行安全与稳定的同时,最大化社会整体效益与用户参与积极性。文中详细阐述了模型的数学构建、求解算法及仿真验证过程,展示了该方法在降低峰值负荷、平抑负荷波动以及提升可再生能源消纳能力方面的显著优势。; 适合人群:具备一定电力系统、优化理论和MATLAB编程基础,从事智能电网、电动汽车调度、分布式能源管理等相关领域研究的研发人员和研究生。; 使用场景及目标:①为电力系统运营商提供高比例电动汽车接入场景下的鲁棒调度决策支持;②为学术研究人员提供分布式鲁棒优化在复杂能源系统中应用的典型案例与代码参考;③目标是提升电网韧性,优化资源配置,并促进电动汽车与电网的协同发展。; 阅读建议:此资源以MATLAB代码实现为核心,建议读者在学习时结合算法原理与代码细节,通过修改参数和场景设置进行仿真复现与结果分析,以深入理解分布式鲁棒优化的内在机制及其在解决实际工程问题中的应用价值。

65,213

社区成员

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

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