程序不使用输出运算符

Program doesnt use output operator

本文关键字:输出 运算符 程序      更新时间:2023-10-16

我目前正在开发一个程序,该程序应该是一个双链表队列。该程序可以工作,但我的问题是它没有使用"Queue_element"的输出运算符。它只是使用标准输出运算符。我需要如何更改我的程序才能使用它?

这是我到目前为止的代码:

#include <iostream>
using namespace std;
template<typename T> class Queue;
template<typename T> class Queue_element {
private:
    T value;
    Queue_element<T>* next;
    Queue_element<T>* prev;
public:
    Queue_element() { value = 0; next = nullptr; prev = nullptr; }
    Queue_element(T n) { value = n; next = nullptr; prev = nullptr; }
    template<typename S> friend ostream& operator<<(ostream& os, const Queue_element<S>& queue_el);
    template<typename S> friend ostream& operator<<(ostream& os, const Queue<S>& queue);
    friend class Queue<T>;
};
template<typename T> class Queue {
private:
    Queue_element<T>* head;
    Queue_element<T>* tail;
public:
    Queue() { head = nullptr; tail = nullptr; }
    void push(T n);
    bool empty() const;
    template<typename S> friend ostream& operator<<(ostream& os, const Queue<S>& queue);
};
template<typename T> bool Queue<T>::empty() const
{
    if (this->head == nullptr && this->tail == nullptr) { return true; }
    else return false;
};
template<typename T> void Queue<T>::push(T n) {
    Queue_element<T>* q = new Queue_element<T>(n);
    if (this->empty()) { this->head = q; this->tail = q; }
    else { this->tail->next = q; q->prev = tail; this->tail = q; }
}
template<typename S>
ostream& operator<<(ostream& os, const Queue_element<S>& queue_el) {
    os << queue_el.value;
    return os;
}
template<typename S>
ostream& operator<<(ostream& os, const Queue<S>& queue){
    Queue_element<S>* q = queue.head;
    while(q != nullptr){
        os << q->value << " ";
        q = q->next;
    }
return os;
}
int main()
{
    Queue<string> q1;
    q1.push("test");
    cout << q1 << endl;
    return 0;
}

这是我所说的输出操作符:

template<typename S>
ostream& operator<<(ostream& os, const Queue_element<S>& queue_el) {
    os << queue_el.value;
    return os;
}

非常感谢您的帮助!

因为您不使用您的输出运算符:

os << q->value << " ";

更改为

os << *q << " ";

因为您隐式调用了以下函数:

template <typename S>
ostream& operator<<(ostream& os, const S& queue_el_val)

使用

os << *q << " ";

相反。