"int" 类型的值不能分配给 "Node<int> *"C/C++(513) 类型的实体
a value of type "int" cannot be assigned to an entity of type "Node<int> *"C/C++(513)
我有一个链表,其中包含指向第一个和最后一个节点的指针以及指示列表中有多少节点的大小。
我有一个函数 returns 第一个节点。
我希望能够使用 queue1.front() = 3;
更改第一个节点中的 m_data。但是,我得到
invalid conversion from ‘int’ to ‘Node<int>*’
编译时出错
template <class T>
class Node {
public:
Node(const T& t);
~Node() = default; // Destructor
Node(const Node&) = default; // Copy Constructor set to default
Node& operator=(const Node&) =
default; // Assignment operator set to default
T& getData();
const T& getData() const;
Node* getNext();
void setNext(Node<T>* newNext);
private:
T m_data;
Node* m_nextNode;
};
template <class T>
Node<T>::Node(const T& t) {
this->m_data = t;
this->m_nextNode = nullptr;
}
template <class T>
class Queue {
public:
static const int SIZE_EMPTY = 0;
Queue();
~Queue(); // Destructor
Queue(const Queue&) = default; // Copy Constructor set to default
Queue& operator=(const Queue&) =
default; // Assignment operator set to default
void pushBack(const T& t);
Node<T>*& front();
const Node<T>*& front() const;
void popFront();
int size() const;
class EmptyQueue {};
private:
Node<T>* m_head;
Node<T>* m_tail;
int m_size;
};
template <class T>
Node<T>*& Queue<T>::front() {
if (this->m_size == Queue<T>::SIZE_EMPTY) {
throw Queue<T>::EmptyQueue();
}
return this->m_head;
}
template <class T>
void Queue<T>::pushBack(const T& t) {
this->m_size += 1;
Node<T>* newNode = new Node<T>(t);
this->m_tail = newNode;
if (this->m_size == 1) {
this->m_head = newNode;
} else {
Node<T>* tempNode = this->m_head;
while (tempNode->getNext()) {
tempNode = tempNode->getNext();
}
tempNode->setNext(newNode);
}
}
int main() {
Queue<int> queue1;
queue1.pushBack(1);
queue1.front() = 3;
}
问题 是 Queue<T>::front
returns 一个 Node<T>*
通过引用,所以通过写 queue1.front() = 3;
你正在尝试将 int
分配给 Node<int>*
.
queue1.front() = 3;
在上面的语句中,左侧结果的类型为 Node<int>*
,但右侧结果为 3
,即 int
。因此,左侧和右侧的类型不匹配,并且由于没有从 int
到 Node<int>*
的隐式转换,您会得到上述错误:
invalid conversion from ‘int’ to ‘Node<int>*
Queue<T>::front()
是 return 一个 Node<T>*&
而它应该 return 一个 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();
}
您还需要在 class 定义中进行相同的更改:
template <class T>
class Queue {
public:
//...
T& front();
const T& front() const;
//...
};
我有一个链表,其中包含指向第一个和最后一个节点的指针以及指示列表中有多少节点的大小。 我有一个函数 returns 第一个节点。
我希望能够使用 queue1.front() = 3;
更改第一个节点中的 m_data。但是,我得到
invalid conversion from ‘int’ to ‘Node<int>*’
编译时出错
template <class T>
class Node {
public:
Node(const T& t);
~Node() = default; // Destructor
Node(const Node&) = default; // Copy Constructor set to default
Node& operator=(const Node&) =
default; // Assignment operator set to default
T& getData();
const T& getData() const;
Node* getNext();
void setNext(Node<T>* newNext);
private:
T m_data;
Node* m_nextNode;
};
template <class T>
Node<T>::Node(const T& t) {
this->m_data = t;
this->m_nextNode = nullptr;
}
template <class T>
class Queue {
public:
static const int SIZE_EMPTY = 0;
Queue();
~Queue(); // Destructor
Queue(const Queue&) = default; // Copy Constructor set to default
Queue& operator=(const Queue&) =
default; // Assignment operator set to default
void pushBack(const T& t);
Node<T>*& front();
const Node<T>*& front() const;
void popFront();
int size() const;
class EmptyQueue {};
private:
Node<T>* m_head;
Node<T>* m_tail;
int m_size;
};
template <class T>
Node<T>*& Queue<T>::front() {
if (this->m_size == Queue<T>::SIZE_EMPTY) {
throw Queue<T>::EmptyQueue();
}
return this->m_head;
}
template <class T>
void Queue<T>::pushBack(const T& t) {
this->m_size += 1;
Node<T>* newNode = new Node<T>(t);
this->m_tail = newNode;
if (this->m_size == 1) {
this->m_head = newNode;
} else {
Node<T>* tempNode = this->m_head;
while (tempNode->getNext()) {
tempNode = tempNode->getNext();
}
tempNode->setNext(newNode);
}
}
int main() {
Queue<int> queue1;
queue1.pushBack(1);
queue1.front() = 3;
}
问题 是 Queue<T>::front
returns 一个 Node<T>*
通过引用,所以通过写 queue1.front() = 3;
你正在尝试将 int
分配给 Node<int>*
.
queue1.front() = 3;
在上面的语句中,左侧结果的类型为 Node<int>*
,但右侧结果为 3
,即 int
。因此,左侧和右侧的类型不匹配,并且由于没有从 int
到 Node<int>*
的隐式转换,您会得到上述错误:
invalid conversion from ‘int’ to ‘Node<int>*
Queue<T>::front()
是 return 一个 Node<T>*&
而它应该 return 一个 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();
}
您还需要在 class 定义中进行相同的更改:
template <class T>
class Queue {
public:
//...
T& front();
const T& front() const;
//...
};