C++ 程序不使用输出运算符
我目前正在开发一个程序,它应该是一个双链表队列。该程序可以工作,但我的问题是它没有对“Queue_element”使用输出操作符。它只使用标准的输出操作符。我需要如何更改我的程序才能使用它 以下是我目前的代码:C++ 程序不使用输出运算符,c++,c++11,C++,C++11,我目前正在开发一个程序,它应该是一个双链表队列。该程序可以工作,但我的问题是它没有对“Queue_element”使用输出操作符。它只使用标准的输出操作符。我需要如何更改我的程序才能使用它 以下是我目前的代码: #include <iostream> using namespace std; template<typename T> class Queue; template<typename T> class Queue_element { priva
#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 << " ";
相反。您得到了什么输出?“它与您想要的有什么不同?”AlanStokes我得到测试作为输出。这是正确的,但我的任务告诉我,输出元素的类'Queue_element'需要一个输出操作符。在我上面的版本中,我可以删除'Queue_element'输出操作符,它仍然可以工作。