重栽运算符???错在哪里??
float operator ^(float a,int n)
{
float ans=1;
for(int i=1; i<=n; i++)
ans*=a;
return ans;
}
我用DEV-C++编译 出错
`float operator^(float, int)' must have an argument of
哪里错了啊???
问题点数:20、回复次数:9Top
1 楼BluntBlade(信仰迷离·重构之道,在于Redo/Undo之间)回复于 2004-02-01 19:52:52 得分 2
重载运算符,必须有一个参数是用户定义类型。Top
2 楼LinuxPanther(Bruce Lee)回复于 2004-02-01 20:05:08 得分 2
“^”操作符是一个位操作符。你这样定义违背了它的原意Top
3 楼LinuxPanther(Bruce Lee)回复于 2004-02-01 20:07:42 得分 2
在《C++primer》中说“程序员只能位类类型或枚举类型的操作数定义重载操作数”Top
4 楼jettylee(要学的还很多~~~)回复于 2004-02-01 21:24:38 得分 0
楼上三个人……
我听谁的啊?Top
5 楼BluntBlade(信仰迷离·重构之道,在于Redo/Undo之间)回复于 2004-02-01 21:27:30 得分 2
呵呵,也许三个都对呢?Top
6 楼wosuntou(莴笋头)回复于 2004-02-01 21:29:24 得分 0
1楼最对!!!Top
7 楼BluntBlade(信仰迷离·重构之道,在于Redo/Undo之间)回复于 2004-02-01 21:33:55 得分 0
这种回答没有最对的……
大家一起来研究理解。Top
8 楼Jinhao(辣子鸡丁·GAME就这样OVER了)回复于 2004-02-01 21:57:07 得分 10
的确需要一个参数是类类型。
这好比你不能进行int& operator++(int&);的重载,因为这些都是语言预先定义好的,而且意图明确的运算符,所以当你进行这样的重载时,编译器会阻止你。
class A{
float f;
public:
A(float p=0):f(p){}
float operator^(int n){
float ans=1;
for(int i=1;i<=n;i++)
ans*=f;
return ans;
}
};
int main(){
A a=5;
cout<<(a^2)<<endl; //用括号,因为^的优先级比<<低
}Top
9 楼BluntBlade(信仰迷离·重构之道,在于Redo/Undo之间)回复于 2004-02-01 21:59:16 得分 2
不一定是类类型,只要是用户定义类型(UDT)就可以了。Top




