一个错误大家帮忙找找,几十行的小代码。

lin_style 2006-11-12 07:53:56
main.cpp

-----------
for(jj=0;jj<j;jj++) Mgr_person=Fun_person_add->Creat_EmployeeTable(Mgr_person);
Print_->Print_Caption();
Mgr_person=Mgr_person_head->Next;
Print_->Print_info(Mgr_person);

----------------


Print_info:
-----------------

void C_Base_Person::Print_info (C_Base_Person* p){
while(p){

cout<<setw(8)<<left;
p-> Display_number();
cout<<setw(7)<<left;
p-> Display_name();
cout<<setw(6)<<left;
p-> Display_sex();
cout<<setw(8)<<left;
p-> Display_age();
cout<<setw(8)<<left;
p-> Display_station();

p->Accound_Pay();
p->Display_acount();

p=p->Next;


}

}


Creat_EmployeeTable:
---------------------

C_Mgr_Person* Add_Employee::Creat_EmployeeTable(C_Mgr_Person *p){
C_Mgr_Person* pp=new C_Mgr_Person;

cout<<"Pleast input SellerMgr's number "<<endl;
pp->Get_number();

cout<<"Pleast input SellerMgr's name "<<endl;
pp->Get_name ();

cout<<"Pleast input SellerMgr's sex "<<endl;
pp->Get_sex ();

cout<<"Pleast input SellerMgr's age "<<endl;
pp->Get_age ();

pp->Get_station();

pp->Next=NULL;
p->Next=pp;

return pp;
}


打印到第二轮就提示内存错误,不能读写
...全文
117 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
jixingzhong 2006-11-12
  • 打赏
  • 举报
回复
搞得太复杂了 ...

直接就一个 Mgr_person 类就是了,
不就是链表一样的么 ...

不过,
楼主这样的做法感觉 很怪啊 ~~
lin_style 2006-11-12
  • 打赏
  • 举报
回复
所以 如果指针的静态类型是基类的话

就只能调用自己基类部分的那个 数据成员了

对,还有一点,
如果基类和派生类都有的话,调用的是基类的那个,

我说的就是这点,如果是一个连表传入,进行一个next的话,就调用到基类的next了。
nothingner 2006-11-12
  • 打赏
  • 举报
回复
没太看懂 但我在primer里看过

动态绑定发生的条件 1 基类指针 2 虚函数

而且每个派生类中都包含自己的基类部分

所以 如果指针的静态类型是基类的话

就只能调用自己基类部分的那个 数据成员了

呵呵 我都不知道自己再说什么 也不知道lz看懂没

重在参与嘛
lin_style 2006-11-12
  • 打赏
  • 举报
回复
to wanfustudio:
确定内存分配
---------------
是说我的程序?还是C++里的机制?

我是想表达这样一个意思

virtual void Print_info(C_Base_Person* p);{
P=P->NEXT;
}
这个C_Base_Person类里有个指向自己的NEXT指针
派生他类A B,也有指向自己的NEXT指针

我用A调用时,,里面对象都执行好好的,
在P->next时,这时候理想的是要用到A的NEXT,,但是程序却用到了。基类里的NEXT。。

飞哥 2006-11-12
  • 打赏
  • 举报
回复
确定内存分配

不多说,估计楼上已经知道了
lin_style 2006-11-12
  • 打赏
  • 举报
回复
代码没有问题。 。

找到错误了。

class C_Base_Person{
public:
C_Base_Person();
~C_Base_Person();

virtual void Print_info(C_Base_Person* p);//方法头帖给出
C_Base_Person* Next;
}

Mgr_person是我申明的另一个类,派生于C_Base_Person类,
想通过动态让程序认到Mgr_person类,
但是这个NEXT指针却认不到。
我手动Mgr_person->Next正常显示。
这里NEXT指针出了问题。。。。

这是C++的一个不足`?

64,282

社区成员

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

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