Kar*_*ide 1 c++ templates class class-template c++11
我有一个链表,其中包含指向第一个和最后一个节点的指针以及指示列表中有多少个节点的大小。\n我有一个返回第一个节点的函数。
\n我希望能够使用 更改第一个节点中的 m_data queue1.front() = 3;。然而,我得到
invalid conversion from \xe2\x80\x98int\xe2\x80\x99 to \xe2\x80\x98Node<int>*\xe2\x80\x99\nRun Code Online (Sandbox Code Playgroud)\n编译时出错
\ninvalid conversion from \xe2\x80\x98int\xe2\x80\x99 to \xe2\x80\x98Node<int>*\xe2\x80\x99\nRun Code Online (Sandbox Code Playgroud)\ntemplate <class T>\nclass Node {\npublic:\n Node(const T& t);\n ~Node() = default; // Destructor\n Node(const Node&) = default; // Copy Constructor set to default\n Node& operator=(const Node&) =\n default; // Assignment operator set to default\n T& getData();\n const T& getData() const;\n Node* getNext();\n void setNext(Node<T>* newNext);\n\nprivate:\n T m_data;\n Node* m_nextNode;\n};\n\ntemplate <class T>\nNode<T>::Node(const T& t) {\n this->m_data = t;\n this->m_nextNode = nullptr;\n}\nRun Code Online (Sandbox Code Playgroud)\ntemplate <class T>\nclass Queue {\npublic:\n static const int SIZE_EMPTY = 0;\n Queue();\n ~Queue(); // Destructor\n Queue(const Queue&) = default; // Copy Constructor set to default\n Queue& operator=(const Queue&) =\n default; // Assignment operator set to default\n void pushBack(const T& t);\n Node<T>*& front();\n const Node<T>*& front() const;\n void popFront();\n int size() const;\n class EmptyQueue {};\n\nprivate:\n Node<T>* m_head;\n Node<T>* m_tail;\n int m_size;\n};\n\ntemplate <class T>\nNode<T>*& Queue<T>::front() {\n if (this->m_size == Queue<T>::SIZE_EMPTY) {\n throw Queue<T>::EmptyQueue();\n }\n return this->m_head;\n}\n\ntemplate <class T>\nvoid Queue<T>::pushBack(const T& t) {\n this->m_size += 1;\n Node<T>* newNode = new Node<T>(t);\n this->m_tail = newNode;\n if (this->m_size == 1) {\n this->m_head = newNode;\n } else {\n Node<T>* tempNode = this->m_head;\n while (tempNode->getNext()) {\n tempNode = tempNode->getNext();\n }\n tempNode->setNext(newNode);\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n
Queue<T>::front()Node<T>*&在应该返回 a 的时候却返回了 a T&。
例子:
template <class T>
T& Queue<T>::front() {
if (this->m_size == Queue<T>::SIZE_EMPTY) {
throw Queue<T>::EmptyQueue();
}
return m_head->getData();
}
template <class T>
const T& Queue<T>::front() const {
if (this->m_size == Queue<T>::SIZE_EMPTY) {
throw Queue<T>::EmptyQueue();
}
return m_head->getData();
}
Run Code Online (Sandbox Code Playgroud)
您还需要在类定义中进行相同的更改:
template <class T>
class Queue {
public:
//...
T& front();
const T& front() const;
//...
};
Run Code Online (Sandbox Code Playgroud)