2015-05-28 63 views
1

我試着重載ostream的操作員一類學生如下:重載ostream的操作錯誤++

//Student.h 
class Student 
{ 
    public: 
     Student(){} 
     ~Student(){} 
     friend std::ostream& operator<< (std::ostream&,const Student&); 
     friend std::istream& operator>> (std::istream&,const Student&); 
    private: 
     char* snum; 
}; 

//Student.cpp 
#include "Student.h" 
std::ostream& operator<< (std::ostream& output,const Student& c) 
{ 
    output<<c.snum<<", "<<c.name<<", "<<c.email<<endl; 
    return output; 
} 
std::istream& operator>> (std::istream& input,const Student& cN) 
{ 
    cout<<"Input number: "; 
    input>>cN.snum; 
    return input; 
} 

//main.cpp 
#include "Student.h" 
int main() 
{ 
    Student st; 
    std::cin >> st; 
    std::cout << st << std::endl; 
    return 0; 
} 

但是,當我輸入的SNUM,我得到錯誤信息「段錯誤」。 我將char* snum;更改爲char snum;,它返回編譯器錯誤The operation "std::istream>> const char" is illegal. 感謝您的幫助。

+0

'snum'不指向任何東西。使用'std :: string'。 – user657267

+0

@ user657267錯誤信息是'The operation'std :: istream >> const std :: string「is illegal。」 – Roaid

+2

'std :: istream&operator >>(std :: istream&input,Student&CN)' – user657267

回答

2

你需要一個SNUM將指向上分配內存,然後你可以用數據輸入它,因爲爲例:

char* p_var = new char[20]; // 20 bytes allocation 

    // ... using p_var 

    delete[] p_var; // Releasep_var memory 

在你的情況,你應該做的構造函數分配和釋放Dtor。 你可以獲取更多信息閱讀: http://www.cplusplus.com/doc/tutorial/basic_io/

1

告訴我,如果你的問題得到有效利用的變化如下解決...

class Student 
{ 
    private: 
     char snum; 
     char name; 
     char email; 
    public: 
     Student(){}; 
     ~Student(){}; 
     friend std::ostream& operator<< (std::ostream&,Student&); 
     friend std::istream& operator>> (std::istream&,Student&); 

}; 


std::ostream& operator<< (std::ostream& output,Student& c) 
{ 
    output<<c.snum<<", "<<c.name<<", "<<c.email<<endl; 
    return output; 
} 
std::istream& operator>> (std::istream& input, Student& cN) 
{ 
    cout<<"Input number: "; 
    input>>cN.snum; 
    input>>cN.name; 
    input>>cN.email; 
    return input; 
} 


int main() 
{ 
    Student st; 
    std::cin >> st; 
    std::cout << st << std::endl; 
    return 0; 
} 

使用字符串或字符數組或使用之前分配的char * X一些內存對於...

+0

謝謝在使用指針之前,只需在構造函數中分配內存,問題就解決了。 – Roaid