C++ 结点类创建

注意,结点类的创建需要使用模板类。模板类的编译不支持分离编译。

解决办法:1,在main函数中包含类的实现源文件即.cpp文件包含进来。同时注意就不要再包含类的声明文件了即.h文件,因为在类的实现的.cpp 文件中已经包括了.h文件。

2 注意在头文件.h 文件中 写好 #ifndef ..... #define.....#endif......

运行环境:VS2015




// Node.h头文件

 #ifndef _NODE_H_
#define _NODE_H_


#include 
template 
class Node
{
private:
    Node *next;

public:
    T data;
    Node(const T & item, Node* ptrnext = NULL);
    void InsertAfter(Node*p);
    Node* DeleteAfter(void);
    Node* NextNode();
    Node();
    ~Node();
};
#endif // !_NODE_H_

// Node.cpp 文件
#include "Node.h"

template
Node::Node()
{
}
template
Node::~Node()
{
}

template
//构造函数初始化
Node::Node(const T & item, Node* ptrnext ):data(item),next(ptrnext)
{
}

//返回私有成员next的值.此处和教材不一样。实验一下
template
Node*Node :: NextNode(void)
//Node ::Node* NextNode(void)const//这种方法好像不对,应该是返回类型放最前边
{
	return  next;
}

template
void Node:: InsertAfter(Node*p)
{
	p->next = next;
	next = p;
}

//删除当前结点,并返回其指针
template
 Node* Node::DeleteAfter(void)
{
	 Node *tempPtr = next;
	if (next = NULL)
		return NULL;

	next = tempPrt->next;
	//next = next-> next; 这样写对不对?
	return tempPtr;
}

//
//结点类的构造,插入和删除。整个功能全部实现~!并且循环输出各个的结点的数据

#include
//#include"Node.h"
#include"Node.cpp"
// using namespace std;
int main(void)
{
	Node *p, *q, *r,*s;
	q = new Node('B');
	p = new Node('A', q);
	r = new Node('C');
	s = new Node('D');
	q->InsertAfter(r);
	r->InsertAfter(s);
	Node*temp = p;
	while (temp != NULL)
	{
		std::cout <data <NextNode();
	}


	std::cout << p->data << std::endl;
	std::cout << p->NextNode()->data<





 
  


你可能感兴趣的:(数据结构C++)