c++ 模版类型
#include <iostream>
#include <string>
#include <cassert>
using namespace std;
template <class T>
class StacK {
public:
enum { DefaultStack = 50,EmptyStack=-1};
Stack();
Stack(int);
~Stack();
void push(const T&);
T pop();
private:
T* elements;
int top;
int size;
void allocate(){
elements=new T[size];
top=EmptyStack;
}
void msg(const char* m)const {
cout<<"***"<<m<<"***"<<endl;
}
friend ostream& operator<<(ostream&,const Stack<T>&);
};
template<class T>
Stack< T >::Stack(){
size=DefaultStack;
allocate();
}
template< class T >
Stack< T >::Stack(int s){
if(s<0)
s*=-1;
else if(0==a)
s=DefaultStack;
size=s;
allocate();
}
template <class T>
Stack<T>::~Stack(){
delete[]elements;
}
template <class T>
void Stack<T>::push(const T& e){
assert(!full());
if(!full())
elsments[++top]=e;
else
msg("Stack full!");
}
template <class T>
T Stack<T>::pop(){
assert(!empty());
if(!empty())
return elements[top--];
else{
msg("Stack empty!");
T dummy_value;
return dummy_value;
}
}
template <class T>
ostream operator<<(ostream& os,const Stack <T>& s){
s.msg("Stack contents:");
int t=s.top;
while(t>s.EmptyStack)
cout<<s.elements[t--]<<endl;
return os;
}
int main(){
;
}
ISO C++ 不允许声明无类型的‘Stack’ [-fpermissive]
等问题
[解决办法]
//楼主看好你的 stack和stacK
#include <iostream>
#include <string>
#include <cassert>
using namespace std;
template <class T>
class StacK {
public:
enum { DefaultStack = 50,EmptyStack=-1};
StacK();
StacK(int);
~StacK();
void push(const T&);
T pop();
private:
T* elements;
int top;
int size;
void allocate(){
elements=new T[size];
top=EmptyStack;
}
void msg(const char* m)const {
cout<<"***"<<m<<"***"<<endl;
}
friend ostream& operator<<(ostream&,const StacK<T>&);
};
template<class T>
StacK< T >::StacK(){
size=DefaultStack;
allocate();
}
template< class T >
StacK< T >::StacK(int s){
if(s<0)
s*=-1;
else if(0==a)
s=DefaultStack;
size=s;
allocate();
}
template <class T>
StacK<T>::~StacK(){
delete[]elements;
}
template <class T>
void StacK<T>::push(const T& e){
assert(!full());
if(!full())
elsments[++top]=e;
else
msg("StacK full!");
}
template <class T>
T StacK<T>::pop(){
assert(!empty());
if(!empty())
return elements[top--];
else{
msg("StacK empty!");
T dummy_value;
return dummy_value;
}
}
template <class T>
ostream operator<<(ostream& os,const StacK <T>& s){
s.msg("StacK contents:");
int t=s.top;
while(t>s.EmptyStack)
cout<<s.elements[t--]<<endl;
return os;
}
int main(){
;
}