堆栈的交换2值不起作用

时间:2016-03-13 11:02:12

标签: c++ function-declaration

#include <iostream>
#include <string.h>
using namespace std;

#define NMAX 10 // pre-processing directive

template<typename T>
class Stack {
public:
T Smain, Saux;
T stackArray[NMAX];
int topLevel;
    int getTopLevel()
    {
      return this->topLevel;
    }
    void push(T x)
     {
    if (topLevel >= NMAX - 1)
        {
                cout<<"The stack is full: we have already NMAX elements!\n";
        return;
            }
            stackArray[++topLevel] = x;
         }
    int isEmpty()
       {
         return (topLevel < 0);
       }
    T pop()
      {
         if (isEmpty()) {
              cout<<"The stack is empty! \n";
         T x;
              return x;
      }
     return stackArray[topLevel--];
       }
    T peek()
   {
   if (isEmpty())
     {
       cout<<"The stack is empty! \n";
       T x;
           return x;
        }
        return stackArray[topLevel];
     }
   void afficher() {
        cout<<"On affiche la pile:";
        for ( int i=0; i<=topLevel; i++ )
           cout<<stackArray[i]<<" ";
        cout<<endl;
    }
    Stack()
    {
       topLevel = -1;
    }
    ~Stack() {
     }
    void change(int i)
    {
        while (Smain.topLevel>i){
            Saux.push(Smain.pop());}
        T aux1=Smain.pop();
        T aux2=Smain.pop();
        Smain.push(aux1);
        Smain.push(aux2);
        while (Saux.topLevel>=0){
           Smain.push(Saux.pop());}
    }
 };
 int main()
 {
     Stack<int> stack1;
     Stack<int> stack2;
      stack1.push(1);
      stack1.push(2);
      stack1.push(3);
      stack1.push(4);
      change(3);
      stack1.afficher();
  return 0;
}

这个程序必须交换堆栈的i和i-1位置,但我得到错误:'change'未在此范围内声明,我不知道如何使其工作。请帮助我,并提前感谢你。

2 个答案:

答案 0 :(得分:0)

change在Stack类中声明,因此它成为Stack实例上的一个方法。

您可能希望将其称为stack1.change(3)

答案 1 :(得分:0)

你不能直接调用类中的change()函数。不要使用类对象来调用它。

class stack{

}objectname;

int main(){
objectname.change(3);
}