我尝试按如下方式在类Student中重载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时,会收到错误消息“Segmentation Fault”。
我将char* snum;更改为char snum;,它返回编译器错误The operation "std::istream>> const char" is illegal.谢谢你的帮助。

最佳答案

您需要snum指向分配的内存,然后可以将其与数据一起输入,例如:

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

   // ... using p_var

   delete[] p_var; // Releasep_var memory

在您的情况下,您应该在Ctor中进行分配,而在Dtor中进行发布。
您可以阅读以获取更多信息:
http://www.cplusplus.com/doc/tutorial/basic_io/

关于c++ - C++中的重载OStream运算符错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30497243/

10-11 18:48