C++ 什么是;警告:函数中没有返回语句返回non void“;意思是

C++ 什么是;警告:函数中没有返回语句返回non void“;意思是,c++,function,pointers,nodes,C++,Function,Pointers,Nodes,此函数用于为循环链表创建新节点,如图所示: Node *newNode(int data) { Node *temp = new Node; temp->next = temp; temp->data = data; } 然而,我从编译器那里得到一个警告。我知道它应该有一个返回值,但不确定实现它的正确方法。我非常感谢您对此提供的任何帮助。Node*newNode(int data)表示此函数必须返回一个节点*,但它不会返回,这会导致。您可能想做的是在函数末尾添加ret

此函数用于为循环链表创建新节点,如图所示:

Node *newNode(int data) 
{
  Node *temp = new Node;
  temp->next = temp;
  temp->data = data;
}
然而,我从编译器那里得到一个警告。我知道它应该有一个返回值,但不确定实现它的正确方法。我非常感谢您对此提供的任何帮助。

Node*newNode(int data)
表示此函数必须返回一个
节点*
,但它不会返回,这会导致。您可能想做的是在函数末尾添加
returntemp
。否则,无论如何都会泄漏内存

修正:

实际上要修复这个函数,考虑使用智能指针,所以有人明确地和明确地拥有堆分配对象:

#include <memory>

struct Node {
  Node* next;
  int data;
};

[[nodiscard]] auto newNode(int const data) {
  auto temp  = std::make_unique<Node>();
  temp->next = temp.get();
  temp->data = data;
  return temp;
}
#包括
结构节点{
节点*下一步;
int数据;
};
[[nodiscard]]自动新建节点(int const数据){
自动温度=标准::使_唯一();
temp->next=temp.get();
温度->数据=数据;
返回温度;
}
定义如下

Node *newNode(int data)
您的函数应该返回一个节点指针。然而,您的实现没有这样的回报。编译器会警告您此问题。事先,您可以通过以下方式解决问题:

Node *newNode(int data) 
{ 
Node *temp = new Node; 
temp->next = temp; 
temp->data = data;
return temp; 
} 

注意:这是一个相当严重的问题,您必须修复代码,否则您会有未定义的行为。

我没有看到
返回温度位于该函数的末尾,因此编译器可能正在进行某些操作。通过将
节点*
声明为结果类型,可以保证所有代码路径最终都会导致
返回
-ing一个
节点*
。您的代码未能实现该承诺;这就是警告。
Node *newNode(int data) 
{ 
Node *temp = new Node; 
temp->next = temp; 
temp->data = data;
return temp; 
}