c++中重载ostream操作符错误
Overloaded ostream operator error in c++
我尝试在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;
}
相关文章:
- 在重载的全局new操作符中使用静态对象会导致核心转储运行时错误
- 无异常的c++操作符重载错误检查
- Assert()函数抛出一个错误——操作符有问题
- c++操作符string和char*导致歧义错误
- 模板结构中的友元操作符引发重定义错误
- 指针上的操作符=可能导致mac上的分段错误
- 错误:没有找到接受右QUdpSocket的操作符
- 内部编译器错误-开关表达式中的模板化转换操作符
- c++中重载*操作符编译错误
- 重载操作符类型错误
- 赋值操作符重载:错误处理场景
- const_iterator上的间接操作符错误
- 使用重载复合赋值操作符时的运行时错误
- 类型转换操作符重载——Visual studio 2013内部错误
- 派生类操作符=错误
- VS 2015更新3删除拷贝赋值操作符错误
- Boost c++ Phoenix用户定义参数的下标操作符[]错误
- 数字字面值操作符错误
- c++中重载ostream操作符错误
- 我对这个赋值操作符错误的假设是正确的吗?