C++ 函数返回linkedlist C++;
正在尝试在我的linkedlist类中实现一个函数,该函数将返回列表中存储的数据总量。i、 e.linkedlist的5、10、20个总数将返回35个 My node类包含getNextPtr和getData方法 我实现了一个新节点,将其称为currentPtr,并将其指向headPtr 编译时,我得到:“36请求currentPtr中的非类类型的成员getNextPtr” 38和40是相同的,38是currentPtr中的getData 不太确定我错过了什么C++ 函数返回linkedlist C++;,c++,linked-list,C++,Linked List,正在尝试在我的linkedlist类中实现一个函数,该函数将返回列表中存储的数据总量。i、 e.linkedlist的5、10、20个总数将返回35个 My node类包含getNextPtr和getData方法 我实现了一个新节点,将其称为currentPtr,并将其指向headPtr 编译时,我得到:“36请求currentPtr中的非类类型的成员getNextPtr” 38和40是相同的,38是currentPtr中的getData 不太确定我错过了什么 int LinkedList::g
int LinkedList::getTotal()
{
int total = 0;
Node *currentPtr = headPtr;
(36) while(currentPtr.getNextPtr() != NULL)
{
(38) total += currentPtr.getData();
(40) currentPtr = currentPtr.getNextPtr();
}
return total;
}
我们的想法是遍历链表,直到它到达tailptr,tailptr将指向null,将它遇到的任何数据添加到总数中
希望这有点道理,提前感谢:)
currentPtr
是指针,而不是类类型(对象)。使用->
访问其成员,而不是
while (currentPrt->getNextPtr()) { ...
currentPtr
是指针,而不是类类型(对象)。使用->
访问其成员,而不是
while (currentPrt->getNextPtr()) { ...
如果要取消引用指针,则需要使用
->
,而不是
e、 g.您的代码变成:
while(currentPtr != NULL)
{
total += currentPtr->getData();
currentPtr = currentPtr->getNextPtr();
}
我还发现编写
while(currentPtr)
(即“while I have a valid pointer”)比显式测试NULL
更自然,如果您想取消引用指针,则需要使用->
,而不是
e、 g.您的代码变成:
while(currentPtr != NULL)
{
total += currentPtr->getData();
currentPtr = currentPtr->getNextPtr();
}
我还发现编写
while(currentPtr)
(即“while I have a valid pointer”)比显式测试NULL
更自然,因为代码节点*currentPtr…
声明了指向节点的指针。
通过指针访问对象的成员变量或函数时-
与这里的情况一样,您需要取消对指针的引用
在您的情况下,这意味着将
成员访问器替换为->
因此,您的代码应该如下所示:
while(currentPtr->getNextPtr() != NULL)
{
total += currentPtr->getData();
currentPtr = currentPtr->getNextPtr();
}
代码
节点*currentPtr…
声明指向节点的指针。
通过指针访问对象的成员变量或函数时-
与这里的情况一样,您需要取消对指针的引用
在您的情况下,这意味着将
成员访问器替换为->
因此,您的代码应该如下所示:
while(currentPtr->getNextPtr() != NULL)
{
total += currentPtr->getData();
currentPtr = currentPtr->getNextPtr();
}
首先,你应该使用
->
而不是
其次,您的代码有一个小错误。如果到达最后一个节点,则它是next
是NULL
,但该节点仍有您忽略的数据。(因为如果ptr->next==NULL
,则不进入while。也就是说,您应该将条件更改为ptr!=NULL
)
我建议使用以下代码之一:
如果在列表的开头有一个虚拟节点(虚拟节点是一个没有数据的节点,仅在列表的开头)
如果没有虚拟节点,它只是有点不同:
int LinkedList::getTotal()
{
int total = 0;
Node *currentPtr = headPtr;
while (currentPtr != NULL) // or simply while (currentPtr)
{
total += currentPtr->getData();
currentPtr = currentPtr->getNextPtr();
}
return total;
}
首先,你应该使用
->
而不是
其次,您的代码有一个小错误。如果到达最后一个节点,则它是next
是NULL
,但该节点仍有您忽略的数据。(因为如果ptr->next==NULL
,则不进入while。也就是说,您应该将条件更改为ptr!=NULL
)
我建议使用以下代码之一:
如果在列表的开头有一个虚拟节点(虚拟节点是一个没有数据的节点,仅在列表的开头)
如果没有虚拟节点,它只是有点不同:
int LinkedList::getTotal()
{
int total = 0;
Node *currentPtr = headPtr;
while (currentPtr != NULL) // or simply while (currentPtr)
{
total += currentPtr->getData();
currentPtr = currentPtr->getNextPtr();
}
return total;
}
我认为您的问题在于使用“.”来引用成员。您的
currentPtr
是一个指针,因此您应该使用->
,例如while(currentPtr->getNextPtr()!=NULL)
P.S.在以后的问题中,最好使用注释(/
)在您希望突出显示的行上,以便人们可以将您的代码复制并粘贴到他们的环境中。我认为您的问题在于使用“.”引用成员。您的currentPtr
是一个指针,因此您应该使用->
,例如while(currentPtr->getNextPtr()!=NULL)
P.S.在以后的问题中,最好使用注释(/
)在您希望突出显示的行上,以便人们可以将您的代码复制并粘贴到他们的环境中。非常感谢:)以及其他帖子:)请确保将while条件更改为currentpr!=NULL
而不是currentPtr->getNextPtr()!=空
。现在的情况是,您忽略了链表的最后一个节点,这是一个bug(请参阅我对这个问题的回答),非常感谢:)以及其他帖子:)请确保将while条件更改为currentPtr!=NULL
而不是currentPtr->getNextPtr()!=空
。现在的情况是,你忽略了链表的最后一个节点,这是一个bug(参见我的回答这个问题)终止条件问题的好地方非常感谢Shahbaz:)这帮助很大,因为当我测试代码时,我遇到了一个分段错误,很高兴我回来重新阅读答案,非常大的帮助:)非常感谢Shahbaz:)这非常有帮助,因为当我测试代码时,我遇到了一个分段错误,很高兴我回来重新阅读答案,非常大的帮助:)