在以下链接列表中,我正在尝试实现打印功能。该函数是模板化的,不是Node类的一部分。
基本上我希望这个打印功能是动态的,这样我就不必手动打印出所有Node->data
。我有点像这个例子一样:http://www.cstutoringcenter.com/tutorials/cpp/cpp17.php
但是,当我尝试实现print函数时,我遇到编译器错误,例如:
node was not declared in this scope
,p' was not declared in this scope
和variable 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");
}
我做错了什么?
答案 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
。由于intNode2
和intNode3
已在堆栈上分配。您还在使用{@ 1}}数组删除delete []
。这是delete
的潜在修复方法:
main
答案 2 :(得分:0)
也许您打算键入Node
而不是node
,因为您在其他地方使用Node<T>
...