c++模板类的使用

新手上路,请多包涵

ifndef LINKSTACK_H_INCLUDED

define LINKSTACK_H_INCLUDED //linkstack.h

using namespace std;
template <typename T>
class LinkStack{
private:

LinkStack<T>* mc_lin;    //栈指针
int mc_size; //最大容量
int mc_top; //栈顶

public:

LinkStack(T size); //构造函数
~LinkStack(); //析构函数
bool stackEmpty();
bool stackFull();
void clearStack();//清空栈中的元素
bool push(T elem);//压栈
bool pop(T &elem);//弹栈
bool getTop(T &elem);//获取栈顶元素
int stackLength();//栈的长度
void traverse();//遍历栈

};

endif // LINKSTACK_H_INCLUDED //头文件编译通过


include"linkstack.h" //linkstack.cpp图片描述

include<iostream>

template <typename T>
LinkStack<T>::LinkStack(T size){

mc_size=size;
mc_lin=new T[mc_size];
mc_top=0;

}
template <typename T>
LinkStack<T>::~LinkStack(){

delete mc_lin;
mc_lin=NULL;

}
template <typename T>
bool LinkStack<T>::stackEmpty(){

return mc_top==0?true:false;

}
template <typename T>
bool LinkStack<T>::stackFull(){

return mc_top>=mc_size?true:false;

}
template <typename T>
void LinkStack<T>::clearStack(){

mc_top=0;

}
template <typename T>
bool LinkStack<T>::push(T elem){

if(stackFull()) return false;
else{
    mc_lin[mc_top++]=elem;
    return true;
}

}
template <typename T>
bool LinkStack<T>::pop(T &elem){

if(stackEmpty()) return false;
else{
    elem=mc_lin[--mc_top];
    return true;
}

}
template <typename T>
bool LinkStack<T>::getTop(T &elem){

if(stackEmpty()) return false;
else{
    elem=mc_lin[mc_top-1];
    return true;
}

}
template <typename T>
int LinkStack<T>::stackLength(){

return mc_top;

}
template <typename T>
void LinkStack<T>::traverse(){

for(int i=0;i<mc_top;i++)
    cout<<mc_lin[i]<<"\t";

}

include<iostream>

include"linkstack.h"

int main()
{

LinkStack<int> s(5);

}图片描述

c++初学者,找不出哪有bug,希望有高人能指点一下,感激不尽!

阅读 2.2k
1 个回答

你是不是只编译了main函数的那个cpp文件,而没有编译linkstack.cpp
两个cpp文件需要一起编译的。
话说这问题的代码排版简直是灾难。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题