#include <iostream> #include <string.h> #include <stdio.h> using namespace std; class Person { public: Person(char *vn, int vage, float vh, float vw); Person(const Person &vref); void Print(); ~Person(); private: char *pName;//姓名 int age;//年龄 float height;//身高 float weight;//体重 }; //构造函数 Person::Person(char *vn, int vage, float vh, float vw) { age = vage; height = vh; weight = vw; strcpy(pName, vn); cout << age << endl; cout << height << endl; cout << weight << endl; cout << pName << endl; } //拷贝构造函数 Person::Person(const Person &vref) { int len = strlen(vref.pName); pName = new char[len]; age = vref.age; height = vref.height; weight = vref.weight; strcpy(pName, vref.pName); } //输出函数 void Person::Print() { cout << age << endl; cout << height << endl; cout << weight << endl; cout << pName << endl; } Person::~Person() { if (!pName == NULL) { delete[]pName; pName = NULL; } } int main() { string A; double B, C, D; cin >> A >> B >> C >> D; Person A1(A, B, C, D); }请指出错误并给出解决办法
时间: 2023-12-03 07:47:37 浏览: 70
#include_iostream.h_
4星 · 用户满意度95%
在 Person 类的构造函数中,使用了未初始化的指针 pName。应该在构造函数中为 pName 分配内存空间,或者使用字符串对象代替字符指针。
解决办法:
1. 为 pName 分配内存空间
在构造函数中,应该为 pName 分配内存空间,例如:
```
Person::Person(char *vn, int vage, float vh, float vw) {
age = vage;
height = vh;
weight = vw;
pName = new char[strlen(vn)+1]; // 分配内存空间
strcpy(pName, vn);
cout << age << endl;
cout << height << endl;
cout << weight << endl;
cout << pName << endl;
}
```
2. 使用字符串对象代替字符指针
可以使用字符串对象代替字符指针,例如:
```
class Person {
public:
Person(string vn, int vage, float vh, float vw);
Person(const Person &vref);
void Print();
~Person();
private:
string pName; // 姓名
int age; // 年龄
float height; // 身高
float weight; // 体重
};
Person::Person(string vn, int vage, float vh, float vw) {
age = vage;
height = vh;
weight = vw;
pName = vn; // 使用字符串对象代替字符指针
cout << age << endl;
cout << height << endl;
cout << weight << endl;
cout << pName << endl;
}
```
阅读全文