使用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;在功能开始时。

并使用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;

}

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...