纠结郁闷有木有啊 标题要长长长长长长长长长长长长长长长才有人看【C++】,该怎么处理

纠结郁闷有木有啊 标题要长长长长长长长长长长长长长长长才有人看【C++】
以个栈的模版
#include <iostream>
#include <ctime>
#include <cstdlib>
using namespace std;

template<class Type>

class Stack{
int stacksize;
Type *items;
int top;
public:
explicit Stack(int ss);
Stack(const Stack &st);
~Stack(){delete [] items;}
  void push(const Type &item);
Type pop();
Stack &operator=(const Stack &st);
};

template <class Type>
inline Stack<Type>::Stack(int ss=0):
stacksize(ss),top(0){
items=new Type[stacksize];
}


template <class Type>
Stack<Type>::Stack(const Stack &st){
stacksize=st.stacksize;
top=st.top;
items=new Type [stacksize];
for(int i=0;i<top;i++){
items[i]=st.items[i];
}
}

template <class Type>
inline void Stack<Type>::push(const Type& item){

if(top<stacksize)

items[top++]=item;

else
cout<<"the stack is full"<<endl;
  }

template <class Type>
inline Type Stack<Type>::pop(){
if(top>0)

return items[top--];
else
cout<<"the stack is empty!"<<endl;
}
 

template <class Type>
inline Stack<Type> &Stack<Type>::operator =(const Stack<Type> &st){
if(this==&st)
return *this;
delete [] items;
stacksize=st.stacksize;
top=st.top;
items=new Type [stacksize];
for(int i=0;i<top;i++)
items[i]=st.items[i];
return *this;
}


int main(){
int m;char *str;
cout<<"enter stack size:"<<endl;
cin>>m;
if(m<=0) cout<<"error of size"<<endl;
else
Stack<char> st (20);[color=#FF0000][/color]它说这个st没定义,郁闷死了- -
str=new char[m];
cin>>str;
for(int i=0;i<m;i++){ 
st.push(str[i]);
  }
  for(int j=0;j<m;j++){
cout<<st.pop()<<endl;
  }
  cout<<endl;
delete [] str;
return 0;

}

------解决方案--------------------
楼主啦,没见过你这么用的。

错误1:
“Stack<char> st (20)"应该改为
Stack<char> st(20);

错误2:
“Stack<char> st (20);”
仅仅这个定义放在else分支,而其后的代码不属于else分支,故无法引用到这个st定义。
“for(int i=0;i<m;i++){
st.push(str[i]);”

下面是我给你修订后的代码。另外,楼主的代码太乱了,你就不能格式化一下吗?
C/C++ code

#include <iostream>
#include <ctime>
#include <cstdlib>
using namespace std;

template<class Type>

class Stack{
    int stacksize;
    Type *items;
    int top;
public:
    explicit Stack(int ss);
    Stack(const Stack &st);
    ~Stack(){delete [] items;}
    void push(const Type &item);
    Type pop();
    Stack &operator=(const Stack &st);
};

template <class Type>
inline Stack<Type>::Stack(int ss=0):
stacksize(ss),top(0){
    items=new Type[stacksize];
}


template <class Type>
Stack<Type>::Stack(const Stack &st){
    stacksize=st.stacksize;
    top=st.top;
    items=new Type [stacksize];
    for(int i=0;i<top;i++){
        items[i]=st.items[i];
    }
}

template <class Type>
inline void Stack<Type>::push(const Type& item){

    if(top<stacksize)

        items[top++]=item;

    else
        cout<<"the stack is full"<<endl;
}

template <class Type>
inline Type Stack<Type>::pop(){
    if(top>0)

        return items[top--];
    else
        cout<<"the stack is empty!"<<endl;
}


template <class Type>
inline Stack<Type> &Stack<Type>::operator =(const Stack<Type> &st){
    if(this==&st)
        return *this;
    delete [] items;
    stacksize=st.stacksize;
    top=st.top;
    items=new Type [stacksize];
    for(int i=0;i<top;i++)
        items[i]=st.items[i];
    return *this;
}


int main()
{
    int m;char *str;
    cout<<"enter stack size:"<<endl;
    cin>>m;
    
    if(m<=0)
         cout<<"error of size"<<endl;
    else
    {    
        Stack<char> st(20);
        str=new char[m];
        cin>>str;
    
        for(int i=0;i<m;i++){  
            st.push(str[i]);
        }
        for(int j=0;j<m;j++){
            cout<<st.pop()<<endl;
        }
        cout<<endl;
        delete [] str;
    }
    return 0;

}