首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

为什么会出现这个有关问题?解决这个有关问题的原理是什么

2013-12-07 
为什么会出现这个问题?解决这个问题的原理是什么?#includeiostreamusing namespace stdclass Merchandi

为什么会出现这个问题?解决这个问题的原理是什么?
#include<iostream>
using namespace std;
class Merchandise{
public:
Merchandise(){};
~Merchandise(){};
friend istream &operator >> (istream &in,Merchandise &s);
friend ostream &operator << (ostream &out,Merchandise &s);
private:
int no;
char *name;
double price;
};
istream& operator >>(istream &in,Merchandise &s)
{
cout<<"please input commoditiy's no:"<<endl;
in>>s.no;
cout<<"please input commoditiy's name:"<<endl;
in>>s.name;
cout<<"please input commoditiy's price:"<<endl;
in>>s.price;
return in;
}
ostream& operator <<(ostream &out,Merchandise &s)
{
out<<"\t"<<"commoditiy's information"<<endl;
out<<"no"<<"\t"<<"name"<<"\t"<<"price"<<endl;
out<<s.no<<"\t"<<s.name<<"\t"<<s.price<<endl;
return out;
}
int main()
{ Merchandise mer;
 cin>>mer;
 cout<<mer;
 return   0;
}
[解决办法]


char *name;
//g改成
char name[24];

//或者在构造函数中动态分配内存空间,在析构里释放就好!
//多说一句,构造函数和析构函数后面的分号不需要,有误导作用!

[解决办法]

#include<iostream>
using namespace std;
class Merchandise{
public:
Merchandise(){};
~Merchandise(){};
friend istream &operator >> (istream &in,Merchandise &s);
friend ostream &operator << (ostream &out,Merchandise &s);
private:
int no;
char name[50];
double price;
};
istream& operator >>(istream &in,Merchandise &s)
{
cout<<"please input commoditiy's no:"<<endl;
in>>s.no;
cout<<"please input commoditiy's name:"<<endl;
//运行到下面一行代码的时候会报异常,这是必然的,因为
//name根本就没有初始化,也没有内存地址,是0xcccccccc
//在定义char *name;的时候改为char name[50]就好了
in>>s.name;
cout<<"please input commoditiy's price:"<<endl;
in>>s.price;
return in;
}
ostream& operator <<(ostream &out,Merchandise &s)
{
out<<"\t"<<"commoditiy's information"<<endl;
out<<"no"<<"\t"<<"name"<<"\t"<<"price"<<endl;
out<<s.no<<"\t"<<s.name<<"\t"<<s.price<<endl;
return out;
}
int main()
{ Merchandise mer;
cin>>mer;
cout<<mer;
return   0;
}

错误的原因在注释里面解释了,另外一种方法是在堆上面申请新的内存,不过,这个有点复杂,建议初学者别采用

热点排行