C ++将项添加到链表中

时间:2014-05-08 15:52:27

标签: c++ class templates linked-list

我试图将一个节点添加到链接列表的开头(推送功能)。我收到了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
}

2 个答案:

答案 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);