Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/158.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何返回节点中的数据?_C++_C++11_Linked List - Fatal编程技术网

C++ 如何返回节点中的数据?

C++ 如何返回节点中的数据?,c++,c++11,linked-list,C++,C++11,Linked List,我必须在GetHead()和GetTail()中返回列表的开头和结尾 我试图自己返回head和tail并得到错误: cannot initialize return object of type 'int' with an lvalue of type 'Node<int> *const' return tail; 您不能返回head/tail本身,因为返回类型是t,因此必须返回内容 至于为什么在使用->value时在string()const中获得EXC\u BAD\u访

我必须在
GetHead()
GetTail()
中返回列表的开头和结尾

我试图自己返回head和tail并得到错误:

cannot initialize return object of type 'int' with an lvalue of type 'Node<int> *const'
    return tail;

您不能返回
head
/
tail
本身,因为返回类型是
t
,因此必须返回内容

至于为什么在使用
->value
时在
string()const
中获得
EXC\u BAD\u访问权限
,您的
AddToTail
中存在一个主要问题。如果您刚刚添加了一个元素,那么
head
tail
是同一个指针,其中
prev
next
的值为
NULL
。然后你会:

    head = new Node<T>(v, tail, NULL);
获取新元素,找到它的
prev
(当前的
tail
/old
head
),并说它的
下一个
tail
。因此,新的
头部
有一个
next
NULL
(它从未设置过),和
prev
tail
,而
tail
本身有一个
next
(因此,如果你从
头部
返回,然后尝试前进,你将进入一个无限循环)

然而,来自
tail
的无限循环甚至不是这里的问题。问题是
head
中的
next
路径命中
NULL
而从未看到
tail
。如果您尝试
operator string()
,它将从
head
开始,然后继续
next
,直到到达
tail
(如果列表构造正确,这是一个合理的假设)。但它永远不会到达
尾部
,它只会点击
NULL
,然后在试图读取
NULL->value
时死掉,这显然是错误的

您需要修复
AddToTail
,这样它就会创建一个合法的
列表。并可能将
assert
s添加到遍历
列表
查找
tail
的代码中,以验证它在命中
tail
之前没有命中
NULL
。我认为解决方法是将
AddToTail
else
案例更改为:

    tail = new Node<T>(v, tail, NULL);
    tail->prev->next = tail;
tail=新节点(v,tail,NULL);
尾部->上一个->下一个=尾部;

但是一定要重新检查您的逻辑,如果可能,适当地添加
assert
s。

当您尝试访问这些值时,您的列表是否非空?请发布一个。你不能把你的全部代码都放在这里。您需要隔离问题并创建一个解决方案。90%的代码不需要用于您要求的问题。
    head->prev->next = tail;
    tail = new Node<T>(v, tail, NULL);
    tail->prev->next = tail;