c++中重载ostream操作符错误

Overloaded ostream operator error in c++

本文关键字:操作符 错误 ostream 重载 c++      更新时间:2023-10-16

我尝试在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 

在您的情况下,您应该在tor中进行分配,在tor中进行释放。你可以阅读更多信息:http://www.cplusplus.com/doc/tutorial/basic_io/

告诉我你的问题是否通过使用以下更改得到解决…

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;
}