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

============
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 types

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

}



12345678_0001
浏览 461回答 2
2回答

婷婷同学_

你没有加 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 typeselem[++top]=e;cout<<"elem[++top]=e已实现"<<endl;}

蛊毒传说

SeqStack(int size);void SeqStackPush(int e);你定义了两个push函数 编译器判定为重定义了原因是这样的 区别两个函数是不是相同的 要看函数名 和 参数列表 以及命名空间函数的返回值是不能作为区别两个函数的指纹的你可以设想这样一个例子比如说你第一个push是int型的返回值你在某个场景下调用SeqStackPush(1);这时编译器就不知道该调用哪个了 因为返回值是int型的函数也可以单独是用而不必用一个变量来接收返回值。
打开App,查看更多内容
随时随地看视频慕课网APP