C++ 重载在参数中使用指针的运算符

C++ 重载在参数中使用指针的运算符,c++,operator-overloading,C++,Operator Overloading,我试图在参数中使用指针重载'>'运算符,但是我得到一个错误,即“运算符>必须至少有一个class类型的参数”。若我不使用指针,我就不会得到那个错误 注:S1是一个类型定义的结构,以及元素 bool operator>(S1 const *V1, S1 const *V2){ if (V1->elem->code > V2->elem->code) return true; return false; } 我在这样的情况下使用运

我试图在参数中使用指针重载'>'运算符,但是我得到一个错误,即“运算符>必须至少有一个class类型的参数”。若我不使用指针,我就不会得到那个错误

注:S1是一个类型定义的结构,以及元素

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;
}

编译器希望将您的示例转换为比较两个指针值。将一个参数作为类类型将告诉它需要知道什么才能解决重载问题

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的朋友,或者让它成为memeber

编译器希望将您的示例转换为比较两个指针值。将一个参数作为类类型将告诉它需要知道什么才能解决重载问题

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的朋友,或者让它成为memeber

这不起作用,因为
操作符这不起作用,因为在我看来,当你想定义一个包含多个参数的新操作符时,你必须做两件事

  • 重载运算符必须在类之外定义
  • 重载运算符必须声明为类的友元函数或类

  • 这是我的经验。

    在我看来,当你想定义一个包含多个参数的新操作符时,你必须做两件事

  • 重载运算符必须在类之外定义
  • 重载运算符必须声明为类的友元函数或类

  • 这是我的经验。

    为什么不让它使用引用和取消引用指针进行比较?例如,
    if((*var1)>(*var2))
    为什么不让它使用引用并取消引用指针进行比较?例如,
    if((*var1)>(*var2))
    它不需要像任何其他函数一样成为朋友或成员。只有当它试图访问S1的私人或受保护成员时,才需要是朋友。啊,好的,谢谢,@Mankarse。我已经有一段时间没有做一个不是会员的了。我不确定Mankarse的答案,但这个解决方案似乎对我有效。ThanksIt不需要像任何其他功能一样成为朋友或成员。只有当它试图访问S1的私人或受保护成员时,才需要是朋友。啊,好的,谢谢,@Mankarse。我已经有一段时间没有做一个不是会员的了。我不确定Mankarse的答案,但这个解决方案似乎对我有效。谢谢