0
votes

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):

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

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

Error 5 error LNK1120: 1 unresolved externals 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
Define IsFull2. Also, please tag this question with pertinent platform tags, apparently this is C++ on Windows?tripleee
Q: "what should I do in order to solve these errors?" A: read them? (unresolved ... symbol "... int ... stack::IsFull2)kfsone
Also, you should refactor your code to avoid duplication. Each stack object can simply point to its own stack; then, just create three instances.tripleee
Agreed. Refactor this code to remove the duplication. You should not be implementing 3 stacks inside of your stack class. Just 1 stack that you use more than 1 time.drescherjm

1 Answers

2
votes

Exactly what the error says: you did not define the stack::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 (and then remove the declaration too).