我创建了一个自定义类 Person,从工作的角度来看,它包含有关人员的信息。
class Person
{
char* _name;
char* _lName;
char* _department;
int _age, _salary;
public:
Person(char* name, char* lName, char* department, int age, int salary);
Person(void);
~Person(void);
char* getFName(){return _name;};
char* getLName(){return _lName;};
char* getDepartment(){return _department;};
int getSalary(){return _salary;};
friend std::ostream &operator<<(std::ostream &cout, Person &person);
friend std::istream &operator>>(std::istream& is, Person &person);
};
我希望完成的是使用 cin 以逗号分隔的 char* 形式将数据流式传输到此类中。
cin 重载:
std::istream &operator>>(std::istream &is, Person &person)
{
char* tmp="";
is >> tmp;
int i=0;
int number=0;
char** dataArray=new char*;
dataArray[0]="";
while(tmp[i]!= '\0')
{
if(tmp[i]==',')
{
number++;
dataArray[number]="";
}
else
dataArray+=tmp[i];
i++;
}
person._name=dataArray[0];
person._lName=dataArray[1];
person._department=dataArray[2];
person._salary=(int)dataArray[3];
person._age=(int)dataArray[4];
return is;
}
但是,程序在以下位置停止,并出现错误;
is >> tmp;
我之前完全没有操作istreams,错误可能是由于错误的推理。 帮助将不胜感激。
最佳答案
您需要在此处指定尺寸:
char** dataArray=new char*;
我认为你需要:
char** dataArray=new char*[5];
你泄露了这个变量的内存。你似乎在操纵这个数组的元素,就好像它们是 std::string
,但它们是简单的字符数组。您需要分配和重新分配它们。为避免所有这些问题,请使用 std::vector
和 std::string
.您的错误与 operator<<
无关本身。
关于c++ - 自定义类的 Cin 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14877634/