为了账号安全,请及时绑定邮箱和手机立即绑定

请教一下为什么这个Stack类的Push函数编译器会这样报错?

请教一下为什么这个Stack类的Push函数编译器会这样报错?

12345678_0001 2021-12-14 19:11:34
============class SeqStack{private:int top;int *elem;int maxsize;public:SeqStack();SeqStack(int size);~SeqStack(){delete [] elem;}void SeqStackPush(int e);int Pop();};===========SeqStack::SeqStackPush(int e){ //error C2556: 'int __thiscall SeqStack::SeqStackPush(int)' : overloaded function differs only by return type from 'void __thiscall SeqStack::SeqStackPush(int)'//error C2371: 'SeqStackPush' : redefinition; different basic typeselem[++top]=e;cout<<"elem[++top]=e已实现"<<endl;}
查看完整描述

2 回答

?
婷婷同学_

TA贡献1844条经验 获得超8个赞

你没有加 void ,而你的编译器在此时默认 SeqStackPush返回值类型为int,这和你之前声明的原型冲突,所以报错,解决方法很简单,就是加上void,如下,
void SeqStack::SeqStackPush(int e)
{
//error C2556: 'int __thiscall SeqStack::SeqStackPush(int)' : overloaded function differs only by return type from 'void __thiscall SeqStack::SeqStackPush(int)'

//error C2371: 'SeqStackPush' : redefinition; different basic types

elem[++top]=e;
cout<<"elem[++top]=e已实现"<<endl;

}

查看完整回答
反对 回复 2021-12-19
?
蛊毒传说

TA贡献1895条经验 获得超3个赞

SeqStack(int size);
void SeqStackPush(int e);
你定义了两个push函数 编译器判定为重定义了
原因是这样的 区别两个函数是不是相同的 要看函数名 和 参数列表 以及命名空间
函数的返回值是不能作为区别两个函数的指纹的

你可以设想这样一个例子
比如说你第一个push是int型的返回值
你在某个场景下调用
SeqStackPush(1);
这时编译器就不知道该调用哪个了 因为返回值是int型的函数也可以单独是用而不必用一个变量来接收返回值。



查看完整回答
反对 回复 2021-12-19
  • 2 回答
  • 0 关注
  • 457 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信