编译错误

时间:2013-12-18 15:10:01

标签: c++ compiler-errors namespaces

当我尝试编译此代码时

using namespace std;
namespace asf{
inline int operator|(int);
}

asf::operator|(int x){
return (x>1)?x*operator|(x-1):1;
}

int main(){
    cout<<5|;
}

我收到以下错误

[Error] 'int asf::operator|(int)' must have an argument of class or enumerated type
[Error] ISO C++ forbids declaration of 'operator|' with no type [-fpermissive]
[Error] 'int asf::operator|(int)' should have been declared inside 'asf'
[Error] 'int asf::operator|(int)' must have an argument of class or enumerated type
In function 'int main()':
[Error] expected primary-expression before ';' token

有什么问题?请帮忙。

1 个答案:

答案 0 :(得分:5)

如错误所示,重载运算符必须至少有一个类或枚举类型的参数。这就是语言的运作方式。

此外,重载时无法更改运算符的arity。您正在尝试定义一元|,这也是非法的。 |必须始终采用两个参数。 operator |的声明只有在一个类中声明它才能包含一个参数,在这种情况下,左手操作数隐含在类的类型中。