程序不使用输出运算符
Program doesnt use output operator
我目前正在开发一个程序,该程序应该是一个双链表队列。该程序可以工作,但我的问题是它没有使用"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 << " ";
相反。
相关文章:
- 尝试重载输出运算符时,我无法遍历对象向量
- 如何为流输出运算符提供重载<<模板'using'类型别名?
- 在C++中重载输入/输出运算符
- 如何处理自定义输出运算符中的 iomanips?
- 基于对函数的参数调用流输出运算符的能力重载函数
- C++将 toString 替换为重载的输出运算符
- 尝试过载输出运算符时出错
- 重载输出运算符给出十六进制数字而不是字符串
- 重载输入/输出运算符,为什么它以这种方式工作而不是以另一种方式工作
- Qt 使用迭代器重载了 qtextstream 输出运算符
- 抽象类和派生类的输出运算符 (<<)
- 重载输出运算符和后置增量运算符时"运算符<<"错误不匹配
- 如何在输出运算符中测试std::showbase或std::noshowbase
- 队列类C++的输出运算符重载
- 变量类型和变量模板的转换和输出运算符
- 重载输出运算符<<以使用 STL 列表迭代器
- C++抽象类的输出运算符
- 重载基类及其派生类(C++)的输出运算符
- 重载输出运算符时出现错误
- 为什么我的输出运算符 <<() 函数定义会导致无法解析的外部符号错误?