我试图将一个节点添加到链接列表的开头(推送功能)。我收到了2个错误:
1)来自' Node int *'的无效转换到' int' (指向main()中的 test.Push(& test2);
2)初始化' int Linked_List :: Push(ItemType)[with ItemType = int]' (指向功能推送)
我真的不确定问题是什么。如果我删除&在main()中出现 test.Push(& test2); 然后我会收到更多错误,所以我认为它是正确的。
//.h
#ifndef Linked_List_h
#define Linked_List_h
template <typename ItemType>
class Node
{
public:
ItemType Data;
Node <ItemType> *next;
};
template <typename ItemType>
class Linked_List
{
public:
Node <ItemType> *start;
Linked_List();
int Push(ItemType newitem);
};
#endif
//.cpp
#include "Linked_List.h"
template <typename ItemType>
Linked_List <ItemType>::Linked_List(){
start = NULL;
}
template <typename ItemType>
int Linked_List <ItemType>::Push(const ItemType newitem){ //error
Node <ItemType> *nnode; //create new node to store new item
nnode -> next = start -> next; //new item now points previous first item of list
start -> next = nnode; //'start' pointer now points to the new first item of list
return 1;
}
int main(){
Linked_List <int> test;
Node <int> test2;
test2.Data = 4;
test.Push(&test2); //error
}
答案 0 :(得分:1)
您的功能的签名需要ItemType
,在您的情况下为int
:
int Push(ItemType newitem);
但是你试图传递Node<ItemType>
,因此你会收到错误。
您的Push
函数已在内部创建一个节点,因此您可以将整数直接传递给它:
Linked_List <int> test;
int test2 = 4;
test.Push(test2);
我需要指出的是,除此之外,您的代码还有其他几个问题 - 对于初学者来说,这个代码段:
Node <ItemType> *nnode; //create new node to store new item
不是否创建了一个节点 - 它只是声明一个指针。
我强烈建议您阅读C ++的基础知识。
答案 1 :(得分:1)
Push采用模板类型,因此在这种情况下为int。你想做的是:
Linked_List<int> test;
test.push(4);