这个那里出错了,请指点
#include<iostream.h>
#include<string.h>
class Empoloyee
{
public:
Empoloyee();
void ChangeName(char,char,char,char,char);
void Display();
protected:
char name[20];
char street[20];
char city[20];
char provence[20];
char postcode[20];
};
void Empoloyee::ChangeName(char*name,char*street,char*city,char*provence,char*postcode)
{
strncpy(name,"bai",sizeof(name));
strncpy(street,"huang",sizeof(street));
strncpy(city,"an",sizeof(city));
strncpy(provence,"he",sizeof(provence));
strncpy(postcode,"455000",sizeof(postcode));
}
void Empoloyee::Display()
{
cout<<name<<'\t'<<street<<'\t'<<city<<'\t'<<provence<<'\t'<<postcode<<endl;
}
int main()
{
Empoloyee a;
a.ChangeName();
a.Display();
return 0;
}
[解决办法]
- C/C++ code
void ChangeName(char,char,char,char,char);
[解决办法]
1. ChangeName 的声明中参数全部改为 char*
2. ChangeName有5个参数,调用时必须给出5个参数
3. 构造函数Empoloyee()只有声明,没有定义。 给出Empoloyee()定义或删除声明使用默认构造函数
4. ChangeName()函数中strncpy函数使用错误,sizeof(name)、sizeof(street)等的值都为4(指针长度为4),把sizeof改为strlen
正确的代码如下:
#include<iostream.h>
#include<string.h>
class Empoloyee
{
public:
//Empoloyee();
void ChangeName(char*,char*,char*,char*,char*);
void Display();
protected:
char name[20];
char street[20];
char city[20];
char provence[20];
char postcode[20];
};
void Empoloyee::ChangeName(char*ChName,char*ChStreet,char*ChCity,char*ChProvence,char*ChPostcode)
{
// strncpy(name,"bai",strlen(name));
// strncpy(street,"huang",strlen(street));
// strncpy(city,"an",strlen(city));
// strncpy(provence,"he",strlen(provence));
// strncpy(postcode,"455000",strlen(postcode));
memset(name,0,20);
memset(street,0,20);
memset(city,0,20);
memset(provence,0,20);
memset(postcode,0,20);
strncpy(name,ChName,strlen(ChName));
strncpy(street,ChStreet,strlen(ChStreet));
strncpy(city,ChCity,strlen(ChCity));
strncpy(provence,ChProvence,strlen(ChProvence));
strncpy(postcode,ChPostcode,strlen(ChPostcode));
}
void Empoloyee::Display()
{
cout<<name<<'\t'<<street<<'\t'<<city<<'\t'<<provence<<'\t'<<postcode<<endl;
}
int main()
{
Empoloyee a;
a.ChangeName("bai","huang","an","he","455000");
a.Display();
return 0;
}
[解决办法]
3楼正解。
1.申明和定义不一致
- C/C++ code
void Empoloyee::ChangeName(char*name,char*street,char*city,char*provence,char*postcode)