如何解决使用C ++中的模板从函数返回指针
主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
;在功能开始时。
获取自由并修改了您的功能。您可以通过多种方式实现下面的功能,因为我现在采用了以下方式,并不是说这是最好的方式。
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;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。