使用重载运算符'<')和'Person')
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用重载运算符'<')和'Person')相关的知识,希望对你有一定的参考价值。
#include <iostream>
#include <string>
using namespace std;
class Person{
public:
string name;
int age, height, weight;
public:
Person(string name = "empty", int age = 0, int height = 0, int weight = 0) {
this->name = name;
this->age = age;
this->height = height;
this->weight = weight;
}
friend ostream& operator<<(ostream& os, const Person& p);
};
ostream& operator<<(ostream os, const Person& p)
{
os << p.name << "
" << p.age << "
" << p.height << "
" << p.weight << "
";
return os;
}
class Node {
public:
Person* data;
Node* next;
Node(Person*A) {
data = A;
next = nullptr;
}
};
class LinkedList {
public:
Node * head;
LinkedList() {
head = nullptr;
}
void InsertAtHead(Person*A) {
Node* node = new Node(A);
node->next = head;
head = node;
}
void Print() {
Node* temp = head;
while (temp != nullptr) {
cout << *(temp->data) << " ";
temp = temp->next;
}
cout << endl;
}
};
int main() {
LinkedList* list = new LinkedList();
list->InsertAtHead(new Person("Bob", 22, 145, 70)); list->Print();
}
您好,我是C ++的新手,这是我第一次重载运算符。我已经做了大量的研究,如何这样做,我不认为我的缺陷是ostream超载。我知道有类似的问题,但我似乎无法让我的工作超载我。基本上我的目标是能够调用打印功能以打印出链接列表。我相信这个问题就行了“cout << *(temp-> data)<<”“;”但我不确定,即使它是我不知道怎么去解决它。有人可以向我解释我做错了什么吗?问题的标题是我在上面发布的一行中收到的错误,这就是为什么我要相信必须在那里更改某些内容的原因。提前致谢!
答案
您忘记通过引用将流传递到重载的<<
运算符。您希望这样做,因为您正在修改用作参数的流。由于无法复制ostream
s,因此会生成错误。
正确的声明:ostream& operator<<(ostream &os, const Person& p)
以上是关于使用重载运算符'<')和'Person')的主要内容,如果未能解决你的问题,请参考以下文章
我正在尝试对运算符'+'执行二进制重载,但输出错误,我不明白为什么?
'operator ++(int)&'运算符重载中的'&'是什么意思? [重复]
| 9 |错误:无效使用非静态数据成员'Matrix :: row'| 9 |错误:数组绑定不是']'令牌之前的整数常量|