gpt4 book ai didi

c++ - (C++)得到以下编译错误: cannot convert 'DoubleNode' to 'DoubleNode*' in initialization

转载 作者:行者123 更新时间:2023-12-02 10:56:46 32 4
gpt4 key购买 nike

我正在尝试编译双链表程序,并且在插入函数中发生以下错误。

DoublyLinkedList.cpp:23:26: error: cannot convert 'DoubleNode<int>' to 'DoubleNode<int>*' in initialization
23 | DoubleNode<ItemType>* prevPtr = getAtPos(position - 1);
| ^~~~~~~
| |
| DoubleNode<int>

相关代码行:
DoubleNode<ItemType>* newNodePtr = new DoubleNode<ItemType>(item);
if (position == 1){
// insert new double node at the begining of the chain
newNodePtr->setNext(headPtr);
headPtr = newNodePtr;
}
else{
// find node that will be before new node
DoubleNode<ItemType>* prevPtr = getAtPos(position - 1);
newNodePtr->setNext(prevPtr->getNext());
prevPtr->getNext()->setPrev(newNodePtr);
newNodePtr->setPrev(prevPtr);
prevPtr->setNext(newNodePtr);

getAtPost函数:
template<class ItemType>
DoubleNode<ItemType> DoublyLinkedList<ItemType>::getAtPos(const int& position) const
{
// count from begining of chain
DoubleNode<ItemType>* curPtr = headPtr;
for (int i = 1; i < position; i++){
curPtr = curPtr->getNext();
}
return *curPtr;
} // end getAtPos

最佳答案

您的getAtPos()方法正在从列表中返回DoubleNode<ItemType>对象的副本,而不是返回指向原始对象的指针,这是调用者实际期望的。

您也没有处理position参数指定超出列表范围的索引的可能性。

尝试以下方法:

template<class ItemType>
DoubleNode<ItemType>* DoublyLinkedList<ItemType>::getAtPos(int position) const
{
DoubleNode<ItemType>* curPtr = nullptr;

if (position >= 0) {
curPtr = headPtr;
while ((curPtr) && (position > 0)) {
curPtr = curPtr->getNext();
--position;
}
}

if (!curPtr)
return nullptr; // or throw an exception...

return curPtr;
}

关于c++ - (C++)得到以下编译错误: cannot convert 'DoubleNode<int>' to 'DoubleNode<int>*' in initialization,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61070725/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com