使用重载运算符'<')和'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)<<”“;”但我不确定,即使它是我不知道怎么去解决它。有人可以向我解释我做错了什么吗?问题的标题是我在上面发布的一行中收到的错误,这就是为什么我要相信必须在那里更改某些内容的原因。提前致谢!

答案

您忘记通过引用将流传递到重载的<<运算符。您希望这样做,因为您正在修改用作参数的流。由于无法复制ostreams,因此会生成错误。

正确的声明:ostream& operator<<(ostream &os, const Person& p)

以上是关于使用重载运算符'<')和'Person')的主要内容,如果未能解决你的问题,请参考以下文章

我正在尝试对运算符'+'执行二进制重载,但输出错误,我不明白为什么?

重载操作符 'operator'

'operator ++(int)&'运算符重载中的'&'是什么意思? [重复]

Python重载比较运算符

运算符重载中没有运算符'=='匹配[重复]

| 9 |错误:无效使用非静态数据成员'Matrix :: row'| 9 |错误:数组绑定不是']'令牌之前的整数常量|