#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 << "\n" << p.age << "\n" << p.height << "\n" << p.weight << "\n\n";
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)