#c #function #pointers #linked-list #main
#c #функция #указатели #связанный список #программа-точка входа
Вопрос:
Строка внутри 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;
}
Ответ №1:
В вашем коде есть недостатки;
Ваше сравнение head == NULL
всегда равно нулю при каждом запуске функции, потому что вы присваиваете NULL Node<T> *head = NULL
; при запуске функции.
И использование NULL
не рекомендуется в c , используйте nullptr
;
Взял на себя смелость и изменил вашу функцию. есть много способов, которыми вы можете реализовать нижеприведенную функцию, на данный момент я выбрал нижеприведенный способ, я не говорю, что это лучший способ.
template<typename T>
void takeInput( Node<T>*amp; 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;
}