C++ primer plus第六版课后编程题答案10.8(来个高手教教我)


#ifndef LIST_H_
#define LIST_H_
template <class T>
struct Node{
	T num;
	struct Node *next;
};
template <class T>
class List{
	static const int MAX=10;
private:
	//T t[MAX];
	//int top;
	Node<T> *front;
	Node<T> *rear;
	int qsize;
	Node<T> *now;
public:
	//List<T>(int m);
	List();
	~List();//构造函数有new ,必须显示析构
	void add(const T &t);
	bool isEmpty()const;
	bool isFull()const;
	//void set(const T &t)const;
	void visit(){
		Node<T> *p=front;
			while((p++)!=nullptr)
			{
				cout<<p->num<<"  ";
			}
	};
};
#endif

List.cpp

#include <iostream>
#include "List.h"
using namespace std;

template <class T>
List<T>::List()	//模板类的定义必须有模板参数,不能写出List::List!!
{
	front=rear=nullptr;
	qsize=0;
}
template <class T>
List<T>::~List()	//模板类的定义必须有模板参数,不能写出List::List!!
{
	delete front;//释放指向首指针的内容
}

template <class T>//必须写出模板类,否则T无效
void List<T>::add(const T &t) 
{
	if(isEmpty())
	{
		Node<T> n=new Node<T>{};
		front=n;
		n.num=t;
		n.next=nullptr;
		qsize++;
		now=n;//令now指向当前节点
	}
	else if(isFull())
	{
		cout<<"List is full"<<endl;
	}
	else
	{
		Node<T> n=new Node<T>{};
		n.num=t;
		now.next=n;
		n.next=nullptr;
		qsize++;
		now=n;//令now指向当前节点
	}
}
template <class T>
bool List<T>::isEmpty()const
{
	//front=nullptr;//不是不能改变里面的数据么?
	qsize=100;
	cout<<"const is not work! "<<qsize<<endl;
	return front==nullptr;
}
template <class T>
bool List<T>::isFull()const
{
	return qsize==MAX;
}

main108.cpp

#include <iostream>
#include "List.h"
using namespace std;
void main108()
{
	//const int ar1[5]={1,2,3,4,5};
	//double ar2[12]={1.1,2.2,3.3,4.4,5.5,6.6,7.7,8.8,9.9,10.1,11.2};
	List<int> arr1;
	List<double> arr2;
	//for(int i=0;i<5;i++)
		//arr1.add(ar1[i]);
	arr1.add(10);
	arr1.visit();

	cin.get();

}

错误提示:

错误 3 error LNK2019: 无法解析的外部符号 “public: void __thiscall List<int>::add(int const &)” (?add@?$List@H@@QAEXABH@Z),该符号在函数 “void __cdecl main108(void)” (?main108@@YAXXZ) 中被引用
E:\C++\number10\number10\main108.obj
number10
错误 5 error LNK2019: 无法解析的外部符号 “public: __thiscall List<int>::List<int>(void)” (??0?$List@H@@QAE@XZ),该符号在函数 “void __cdecl main108(void)” (?main108@@YAXXZ) 中被引用
E:\C++\number10\number10\main108.obj
number10

…..

 


发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注