C ++:简单节点/链接列表

时间:2013-04-16 19:09:56

标签: c++ linked-list nodes

在以下链接列表中,我正在尝试实现打印功能。该函数是模板化的,不是Node类的一部分。

基本上我希望这个打印功能是动态的,这样我就不必手动打印出所有Node->data。我有点像这个例子一样:http://www.cstutoringcenter.com/tutorials/cpp/cpp17.php

但是,当我尝试实现print函数时,我遇到编译器错误,例如: node was not declared in this scopep' was not declared in this scopevariable or field 'print' declared void

这是我的计划:

#include<iostream>
using namespace std;

template<typename T>
class Node
{
 public:
        Node(T = 0);
        ~Node() { delete [] nextPtr; };

        T getData() const;
        Node<T>*& getNextPtr() { return nextPtr; };

 private:
        T data;
        Node<T> *nextPtr;    
};

//CONSTRUCTOR   
template<typename T>
Node<T>::Node(T newVal)
     : data(newVal), nextPtr(NULL)
{
    //EMPTY       
};

//GETDATA() -- RETURN DATA VALUE
template<typename T>
T Node<T>::getData() const
{
      return data;

};

//PRINT FUNCTION
template<typename T>
void print(node<T>* p)
{
     while(p)
     {
             cout << p->data();
             p = p->link();        
     }
};

int main()
{
    Node<int> intNode1(5),  intNode2(6), intNode3(7);

    intNode1.getNextPtr() = &intNode2;
    intNode2.getNextPtr() = &intNode3;

    print(&intNode1);

    system("pause");   
}

我做错了什么?

3 个答案:

答案 0 :(得分:1)

你打印功能:

template<typename T>
void print(node<T>* p)

应该是:

template<typename T>
void print(Node<T>* p)
           //^^^^

由于您的代码中未定义node类模板。

编辑:Node类中没有定义link()data()

答案 1 :(得分:1)

有一些问题,你错误输入Node并且你没有正确使用接口,这将编译:

template<typename T>
void print(Node<T>* p)
{
     while(p)
     {
             cout << p->getData() << std::endl;
             p = p->getNextPtr();        
     }
}

添加std::endl以确保您看到输出。您使用该类的方式也是析构函数将在非动态分配的数据上调用delete。由于intNode2intNode3已在堆栈上分配。您还在使用{@ 1}}数组删除delete []。这是delete的潜在修复方法:

main

答案 2 :(得分:0)

也许您打算键入Node而不是node,因为您在其他地方使用Node<T> ...