如何获取下一个节点的值?它总是返回最后一个Node
How can I get the value of the next Node? It always return the last Node
class Node{
private:
int value;
Node *next;
public:
Node(int aValue){
value = aValue;
cout<< "Node created: " << value <<endl;
}
void setValue(int newValue){
value = newValue;
}
int getValue(){
return value;
}
void setNext(Node node){
next = &node;
}
Node nextNode(){
return *next;
}
};
int main (){
Node nodeA(29);
Node nodeB(3);
Node nodeC(56);
Node nodeD(72);
Node nodeE(69);
nodeA.setNext(nodeB);
nodeB.setNext(nodeC);
nodeC.setNext(nodeD);
nodeD.setNext(nodeE);
cout<< nodeA.nextNode().getValue();
}
链表方法应使用指针。查看您的setNext
版本
void setNext(Node node){
next = &node;
}
正如您所看到的,它存储节点参数的地址,这与main中节点对象的地址不同。而且,因为一旦setNext
方法退出,节点参数就不存在了,所以您最终会存储一个无效的地址。
试试这个
void setNext(Node* node){
next = node;
}
Node* nextNode(){
return next;
}
int main()
{
...
nodeA.setNext(&nodeB);
nodeB.setNext(&nodeC);
nodeC.setNext(&nodeD);
nodeD.setNext(&nodeE);
cout<< nodeA.nextNode()->getValue();
}
您的代码有未定义的行为。
void setNext(Node node){
next = &node;
}
您存储本地node
的地址。一旦此函数返回node
就不再存在,并且next
是一个悬空指针。稍后在nextNode
中取消引用该无效指针会调用未定义的行为。
设置";下一个"??
做怎么样
void setNext(Node* node){
next = node;
value = node->value;
}
int getValue(){
return next->value;
}
相关文章:
- 来自 std::list 的迭代器 .end() 按预期返回"0xcdcdcdcdcdcdcdcd"但 .begin()
- 什么时候在C++中返回常量引用是个好主意
- 你能重载对象变量名本身返回的内容吗
- 为什么 Serial.println(<char[]>);返回随机字符?
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- 如何获取std::result_of函数的返回类型
- QueryWorkingSet总是返回false
- (C++)分析树以计算返回错误值的简单算术表达式
- 访问者访问变体并返回不同类型时出错
- 如何返回一个类的两个对象相加的结果
- OpenInventor从9.8升级到10.4.2后,GLSL纹理返回零
- lower_bound()返回最后一个元素
- node-gyp 在 macOS 上未正确链接库
- "throw expression code" 1e7 >返回 d 是什么?投掷标准::overflow_error( "too big" ) : d;意味 着?
- 奇怪的(对我来说)返回声明 - 在谷歌上找不到任何关于它的信息
- 如何取消对nullptr的屏蔽,返回正确的对象
- 函数与返回类型 node* 与 C++ 中的 OOP 结合使用
- 使用 Node 原生 C++ 插件中的 protobuf 并返回 V8
- *v8::String::Utf8Value(args[0]->ToString()) 不返回 node 的字符串.js addon 参数
- 如何在Node.js插件中返回JSON内容