鍍金池/ 問答/C++/ c++模板類使用 頭文件編譯

c++模板類使用 頭文件編譯

//linkstack.h
##ifndef LINKSTACK_H_INCLUDED
##define LINKSTACK_H_INCLUDED
##include<iostream>
using namespace std;
template <typename T>
class LinkStack{
private:
    T* mc_lin;    //棧指針
    int mc_size; //最大容量
    int mc_top; //棧頂
public:
    LinkStack(const LinkStack<T>& a);//深拷貝 
    LinkStack(T size); //構(gòu)造函數(shù)
    ~LinkStack(); //析構(gòu)函數(shù)
    bool stackEmpty();
    bool stackFull();
    LinkStack<T>* clearStack();//清空棧中的元素
    LinkStack<T>*  push(T elem);//壓棧
    LinkStack<T>* pop(T &elem);//彈棧
    bool getTop(T &elem);//獲取棧頂元素
    int stackLength();//棧的長度
    void traverse();//遍歷棧
    };
template <typename T>
LinkStack(const LinkStack<T>& a)
{
    mc_lin=a.mc_lin;
    mc_size=a.mc_size;
    mc_top=a.mc_top;
}
template <typename T>
LinkStack<T>::LinkStack(T size){
    this->mc_size=size;
    this->mc_lin=new T[mc_size];
    this->mc_top=0;

}
template <typename T>
LinkStack<T>::~LinkStack(){
    delete this->mc_lin;
    this->mc_lin=NULL; 
}
template <typename T>
bool LinkStack<T>::stackEmpty(){
    return this->mc_top==0?true:false;
}
template <typename T>
bool LinkStack<T>::stackFull(){
    return this->mc_top>=this->mc_size?true:false;
}
template <typename T>
LinkStack<T>* LinkStack<T>::clearStack(){
    this->mc_top=0;
    return this;
}
template <typename T>
LinkStack<T>* LinkStack<T>::push(T elem){
    if(this->stackFull()) return this;
    else{
    this->mc_lin[this->mc_top++]=elem;
    return this;
    }

}
template <typename T>
LinkStack<T>* LinkStack<T>::pop(T &elem){
    if(this->stackEmpty()) return this;
    else{
        elem=this->mc_lin[--this->mc_top];
        return this;
    }
}
template <typename T>
bool LinkStack<T>::getTop(T &elem){
    if(this->stackEmpty()) return false;
    else{
        elem=this->mc_lin[this->mc_top-1];
        return true;
    }
}
template <typename T>
int LinkStack<T>::stackLength(){
    return this->mc_top;
}
template <typename T>
void LinkStack<T>::traverse(){
    for(int i=0;i<this->mc_top;i++)
        cout<<this->mc_lin[i]<<"\t";
}

##endif // LINKSTACK_H_INCLUDED

圖片描述

不知哪里出錯,還望各位大佬看到指出

回答
編輯回答
情未了

definition處改成這樣:

LinkStack<T>::LinkStack(const LinkStack<T>& a)

另外你把代碼貼貼好行嗎...

2018年5月8日 02:58