【问题标题】:Returning a pointer from a function using template in c++在 C++ 中使用模板从函数返回指针
【发布时间】:2020-12-24 20:28:54
【问题描述】:

main 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;
    }

【问题讨论】:

    标签: c++ function pointers linked-list main


    【解决方案1】:

    你的代码有缺陷;

    您比较head == NULL,它总是为空,每次函数运行时,因为您分配了NULL Node&lt;T&gt; *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;
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-25
      • 2023-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多