使用重载运算符&#39;&lt;&lt;&quot;&#是不明确的(操作数类型&#39; ostream&#39;(又名&#39; basic_ostream <char>&#39;)和&#39; Person&#39;)

时间:2018-03-04 03:29:14

标签: c++ error-handling operator-overloading

#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超载。我知道有类似的问题,但我似乎无法让我的工作超载我。基本上我的目标是能够调用打印功能以打印出链接列表。我相信这个问题就在线上&#34; cout&lt;&lt; *(temp->数据)&lt;&lt; &#34; &#34 ;;&#34;但我不确定,即使它是我不知道怎么去解决它。有人可以向我解释我做错了什么吗?问题的标题是我在上面发布的一行中收到的错误,这就是为什么我要相信必须在那里更改某些内容的原因。提前谢谢!

1 个答案:

答案 0 :(得分:2)

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

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

相关问题