我正在尝试重载“>”运算符在参数中取指针,但是我得到一个错误,说“运算符>必须至少有一个类型类的参数”。如果我不使用指针,我不会得到那个错误。
注意:S1是typedef'd结构,以及elem。
bool operator>(S1 const *V1, S1 const *V2){
if (V1->elem->code > V2->elem->code)
return true;
return false;
}
我在这种情况下使用运算符,例如:
S1 * funct(S1 *var1, S1 *var2){
if (var1 > var2)
return var1;
return var2;
}
答案 0 :(得分:2)
这不起作用,因为已经为指针定义了operator<
。在内置类型上重载运算符是不可能的,因为已经定义了对内置类型有意义的所有运算符。
答案 1 :(得分:1)
编译器希望将您的示例转换为比较两个指针值。将一个参数作为类类型将告诉它解决过载需要知道的内容。
bool operator>(const S1& V1, const S1& V2){
if (V1.elem->code > V2.elem->code)
return true;
return false;
}
S1 * funct(S1 *var1, S1 *var2){
if (*var1 > *var2)
return var1;
return var2;
}
另外,我对此有点生疏,但我认为你必须宣布运营商是S1的朋友,或者让它成为一个成员。
答案 2 :(得分:1)
在我看来,当你想要定义一个有多个参数的新运算符时,你必须做两件事。
这是我的经历。