c++ - 自定义类的 Cin 参数

标签 c++ operator-overloading istream

我创建了一个自定义类 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::vectorstd::string .您的错误与 operator<< 无关本身。

关于c++ - 自定义类的 Cin 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14877634/

相关文章:

c++ - 一次处理所有传递的重载

c++ - 运算符的模糊过载 "<<"

c++ - 重载 * 运算符以同时在右侧和左侧工作

c++ - 这是编译器错误还是我的代码?

c++ - 错误重载运算符 '>>'

C++ 将 "this"实例传递给类中的属性

c++ - 将 OpenMP 与 -fopenmp 和 -lgomp 链接起来的区别

c# - 将客户端-服务器应用程序从 C++ 转换为 C#

c++ - 关于 C++ 中的 const 指针的问题?

c++ - 使用 getline 处理重定向文件输入后使用 cin 进行键盘输入