重载一个运算符,参数中有指针

时间:2011-10-12 01:41:38

标签: c++ operator-overloading

我正在尝试重载“>”运算符在参数中取指针,但是我得到一个错误,说“运算符>必须至少有一个类型类的参数”。如果我不使用指针,我不会得到那个错误。

注意: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;
}

3 个答案:

答案 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)

在我看来,当你想要定义一个有多个参数的新运算符时,你必须做两件事。

  1. 必须在班级之外定义过载运算符。
  2. 必须将重载运算符声明为类的朋友函数或类。
  3. 这是我的经历。