0

スタックについて質問があります... 3 スタックでプログラムを書きたいのですが、これらのスタックのそれぞれにこの操作を追加したいです (配列を使用する必要があります)。

1.スタックを作成する 2.番号をプッシュする 3.番号をポップする 4.各スタックのトップを表示する

プログラムを作成しましたが、次のエラーが発生しました。

エラー 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

エラー 5 エラー LNK1120: 1 未解決の外部 C:\Users\Princess\Documents\Visual Studio 2012\Projects\Project9\Debug\Project9.exe 1

これらのエラーを解決するにはどうすればよいですか?

#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;
}
4

1 に答える 1

2

まさにエラーの内容:stack::IsFull2コードでメソッドを定義していませんが、メソッド内で使用していますstack::Push2stack::IsFull2呼び出されないように、コードの本体を記述するか、コードを変更する必要があります (その後、宣言も削除します)。

于 2013-11-03T08:35:48.043 に答える