我对堆栈有疑问...... 我想用3stacks编写一个程序,我想在每个堆栈上添加这些操作(我应该使用数组):
1.创建堆栈 推号码 3.pop号码 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 \项目\ 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;
}
答案 0 :(得分:1)
错误说明的是:您没有在代码中定义IsFull2
方法,而是在stack::Push2
方法中使用它。您需要编写stack::IsFull2
的正文或更改您的代码,以便它不会调用它(然后删除声明)。