C++primer plus第六版课后编程题答案10.8(来个高手教教我)
List.h
#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
.....