主Node<int> *head = takeInput()
内部的行给出错误,没有匹配的函数调用'takeInput()'。您能帮我一下,告诉我我在这里犯了什么错误,以便将来不再这样做。谢谢!
#include<iostream>
using namespace std;
template<class T>
class Node{
public:
T data;
Node *next;
Node(T x){
data = x;
next = NULL;
}
};
template<typename T>
Node<T> * takeInput(){
T data;
cin>>data;
Node<T> *head = NULL;
Node<T> *tail = NULL;
while(data != -1){
Node<T> *newNode = new Node(data);
if(head == NULL){
head = newNode;
tail = newNode;
}else{
tail->next = newNode;
tail = tail->next;
}
cin>>data;
}
return head;
}
int main(){
Node<int> *head = takeInput();
cout<<head->data;
}
最佳答案
您的代码有缺陷;
您的比较head == NULL
始终为null,每次函数运行都因为您分配NULL Node<T> *head = NULL
;在功能开始时。
并且使用c++中不推荐使用的 NULL
,请使用 nullptr
;
自由自在并修改了您的功能。有很多方法可以实现下面的功能,因为我现在把它当作下面的方法,我并不是说这是最好的方法。
template<typename T>
void takeInput( Node<T>*& head, T val ){
Node<T>* newNode = new Node<T>( val );
if ( head == nullptr )
{
head = newNode;
}
else
{
Node<T>* tmp = head;
while ( tmp->next != nullptr ) tmp = tmp->next;
tmp->next = newNode;
}
}
int main()
{
Node<int> *head;
takeInput( head, 10 );
takeInput( head, 20 );
takeInput( head, 30 );
std::cout<< head->data << std::endl;
std::cout<< head->next->data << std::endl;
std::cout<< head->next->next->data << std::endl;
}
关于c++ - 使用C++中的模板从函数返回指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63760260/