不能將模板類的聲明與實現分開到.h和.cpp中寫
類模板使用時必須將成員函數和實現寫在一個頭文件中,不能分開,不能分開,不能分開,重要的說三遍。
ios
stack.h函數
1 #ifndef STACK_H_ 2 #define STACK_H_ 3 template <class Type> 4 class Stack 5 { 6 private: 7 Type *ptr; 8 int num; 9 int size; 10 public: 11 Stack(const int &); 12 ~Stack(); 13 void pop(); 14 void push(const Type &a); 15 void output(); 16 }; 17 18 19 template <class Type> 20 Stack<Type>::Stack(const int &n) 21 { 22 ptr = new Type[n]; 23 num = 0; 24 size = n; 25 } 26 27 template <class Type> 28 Stack<Type>::~Stack() 29 { 30 delete[]ptr; 31 } 32 33 template <class Type> 34 void Stack<Type>::pop() 35 { 36 if (num == 0) 37 { 38 cout << "Error! Stack is empty." << endl; 39 return; //防止越界 40 } 41 ptr[num-1] = 0; 42 num--; //計總數 43 } 44 45 template <class Type> 46 void Stack<Type>::push(const Type &a) 47 { 48 if (num == size) 49 { 50 cout << "Error! Stack is full!." << endl; 51 return; //防止越界 52 } 53 ptr[num] = a; 54 ++num; //計總數 55 } 56 57 template <class Type> 58 void Stack<Type>::output() 59 { 60 for (int i = 0; i < num; ++i) 61 cout << ptr[i]; 62 cout << endl; 63 } 64 65 #endif
mian.cppspa
1 #include<iostream> 2 #include"Stack.h" 3 using namespace std; 4 int main() 5 { 6 Stack <int> a(10); 7 for (int i = 1; i < 9; ++i) 8 a.push(i); 9 a.output(); 10 a.pop(); 11 a.output(); 12 13 Stack <char> b(10); 14 for (int i = 70; i < 76; ++i) 15 b.push(i); 16 b.output(); 17 18 system("pause"); 19 return 0; 20 }