2013-02-14 24 views
0

我從作業角度製作了一個自定義類Person,它保存有關人員的信息。Cin參數到自定義類

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,錯誤可能是由於錯誤的推理。 幫助,將不勝感激。

+1

'tmp'指向一個不能讀取數據的字符串''「''。在任何地方你都會使用'std :: string'而不是'char *'更好。 – 2013-02-14 15:04:54

+0

注意到,非常感謝:) – Nattfrosten 2013-02-14 15:42:40

回答

2

這裏需要指定大小:

char** dataArray=new char*; 

我想你需要:

char** dataArray=new char*[5]; 

你泄露該變量的內存。你似乎在操縱這個數組的元素,就好像它們是std::string一樣,但它們是簡單的char數組。您需要分配和重新分配它們。爲了避免所有這些問題使用std::vectorstd::string。你的錯誤與operator<<本身無關。

+0

我不知道你只能流入std :: string,謝謝:) – Nattfrosten 2013-02-14 15:36:43