这个堆栈有什么问题?

时间:2022-12-21 17:01:06

I have a question about stacks... I want to write a program with 3stacks and I want to add this operations on each of these stacks( I should use arrays):

我有一个关于堆栈的问题...我想编写一个带有3stacks的程序,我想在每个堆栈上添加这些操作(我应该使用数组):

1.create the stack 2. push number 3.pop number 4. display the top of each stack

1.创建堆栈2.按数字3.pop数字4.显示每个堆栈的顶部

I wrote the program but I encountered these errors:

我写了程序,但我遇到了这些错误:

Error 4 error LNK2019: unresolved external symbol "public: int __thiscall stack::IsFull2(void)" (?IsFull2@stack@@QAEHXZ) referenced in function "public: void __thiscall stack::Push2(void)" (?Push2@stack@@QAEXXZ) C:\Users\Princess\Documents\Visual Studio 2012\Projects\Project9\Project9\Source.obj

错误4错误LNK2019:未解析的外部符号“public:int __thiscall stack :: IsFull2(void)”(?IsFull2 @ stack @@ QAEHXZ)在函数“public:void __thiscall stack :: Push2(void)”中引用(?Push2 @ stack @@ QAEXXZ)C:\ Users \ Princess \ Documents \ Visual Studio 2012 \ Projects \ Project9 \ Project9 \ Source.obj

Error 5 error LNK1120: 1 unresolved externals C:\Users\Princess\Documents\Visual Studio 2012\Projects\Project9\Debug\Project9.exe 1

错误5错误LNK1120:1个未解析的外部C:\ Users \ Princess \ Documents \ Visual Studio 2012 \ Projects \ Project9 \ Debug \ Project9.exe 1

what should I do in order to solve these errors?

我该怎么做才能解决这些错误?

#include <iostream>
using namespace std;
#define Max 100
class stack  
{
private:
    int a[Max],b[Max],c[Max];
    int sp1,sp2,sp3;
public:
    void create1();
    void create2();
    void create3();
    int IsEmpty1();
    int IsEmpty2();
    int IsEmpty3();
    int IsFull1();
    int IsFull2();
    int IsFull3();
    void Push1();
    void Push2();
    void Push3();
    int Pop1();
    int Pop2();
    int Pop3();
    void Top();
    void Show();    
    int menu();
};
//***************************************
void stack::create1()
{
    sp1=-1;
};
//***************************************

void stack::create2()
{
    sp2=-1;
}
//***************************************

void stack::create3()
{
    sp3=-1;
}
//***************************************
int stack::IsEmpty1(){
    return sp1==-1;
}
//***************************************
int stack::IsEmpty2(){
    return sp2==-1;
}
//***************************************
int stack::IsEmpty3(){
    return sp3==-1;
}
//***************************************

int stack::IsFull1()
{
    return sp1==Max-1;
}
//***************************************
void stack::Push1()
{
    if(IsFull1())
        printf("stack is full");
    else
    {
        int x;
        cout<<"Enter your number"<<endl;
        cin>>x;
        sp1++;
        a[sp1]=x;
    }
}
//***************************************
int stack::Pop1()
{
    if(IsEmpty1())
        cout<<"stack is empty"<<endl;
    else
    {
        int x=a[sp1];
        sp1--;
        return x;
    }
}
//***************************************
int stack::IsFull3()
{
    return sp3==Max-1;
}
//***************************************
void stack::Push2()
{
    if(IsFull2())
        printf("stack is full");
    else
    {
        int x;
        cout<<"Enter your number"<<endl;
        cin>>x;
        sp2++;
        b[sp2]=x;
    }
}
//***************************************
int stack::Pop2()
{
    if(IsEmpty2())
        cout<<"stack is empty"<<endl;
    else
    {
        int x=b[sp2];
        sp2--;
        return x;
    }
}
//***************************************
void stack::Push3()
{
    if(IsFull3())
        printf("stack is full");
    else
    {
        int x;
        cout<<"Enter your number"<<endl;
        cin>>x;
        sp3++;
        c[sp3]=x;
    }
}
//***************************************
int stack::Pop3()
{
    if(IsEmpty3())
        cout<<"stack is empty"<<endl;
    else
    {
        int x=c[sp3];
        sp3--;
        return x;
    }
}
//***************************************
void stack::Top()
{
    cout<<"the top of first stack"<<a[sp1]<<endl;
    cout<<"the top of second stack"<<b[sp2]<<endl;
    cout<<"the top of third stack"<<c[sp3]<<endl;
}
//***************************************
void stack::Show()
{
    for(int i=0;i<=sp1;i++)
        cout<<"the members of the first stack:"<<a[i]<<endl;
    for(int j=0;j<=sp2;j++)
        cout<<"the members of the second stack:"<<b[j]<<endl;
    for(int k=0;k<=sp3;k++)
        cout<<"the members of the third stack:"<<c[k]<<endl;
}
//***************************************

int stack::menu(){
    int x;
    cout<<"1.Add Item"<<endl;
    cout<<"2.Delete Item"<<endl;
    cout<<"3.Get Count"<<endl;
    cout<<"4.Show stack"<<endl;
    cout<<"5.Exit"<<endl;
    cout<<"Enter your choose:"<<endl;
    cin>>x;
    return x;
}
////***************************************
int main()
{
    stack st;
    st.create1();
    st.create2();
    st.create3();
    while(1)
    {
        switch(st.menu())
        {
            case 1:
                cout<<"first stack:"<<endl;
                st.Push1();
                cout<<"second stack:"<<endl;
                st.Push2();
                cout<<"third stack:"<<endl;
                st.Push3();
                break;
            case 2:
                cout<<"first stack:"<<endl;
                st.Pop1();
                cout<<"second stack:"<<endl;
                st.Pop2();
                cout<<"third stack:"<<endl;
                st.Pop3();
                break;
            case 3:
                st.Top();
                break;
            case 4:
                st.Show();
                break;
            case 5:
                return 0;
            default:
                cout<<"incorrect"<<endl;
        }
    }
    return 0;
}

1 个解决方案

#1


1  

Exactly what the error says: you did not define the IsFull2 method in your code, but you use it inside the stack::Push2 method. You need to write the body of stack::IsFull2 or change your code so it does not call it (an then remove the declaration too).

确切地说错误是什么:你没有在你的代码中定义IsFull2方法,但你在stack :: Push2方法中使用它。您需要编写stack :: IsFull2的主体或更改您的代码,以便它不会调用它(然后删除声明)。

#1


1  

Exactly what the error says: you did not define the IsFull2 method in your code, but you use it inside the stack::Push2 method. You need to write the body of stack::IsFull2 or change your code so it does not call it (an then remove the declaration too).

确切地说错误是什么:你没有在你的代码中定义IsFull2方法,但你在stack :: Push2方法中使用它。您需要编写stack :: IsFull2的主体或更改您的代码,以便它不会调用它(然后删除声明)。