重载在参数中采用指针的运算符

发布于 12-09 12:01 字数 442 浏览 1 评论 0原文

我正在尝试超载“>”运算符在参数中采用指针,但是我收到一条错误消息,指出“运算符 > 必须至少有一个类型为类的参数”。如果我不使用指针,我就不会收到该错误。

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

I am trying to overload the '>' operator taking a pointer in parameter, however I get an error saying "operator > must have at least one parameter of type class". I do not get that error if I do not use pointer.

Note: S1 is a typedef'd structure, as well as elem.

bool operator>(S1 const *V1, S1 const *V2){
    if (V1->elem->code > V2->elem->code)
        return true;
    return false;
}

I use the operator in a case like this, for example :

S1 * funct(S1 *var1, S1 *var2){
    if (var1 > var2)
        return var1;
    return var2;
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

忆离笙2024-12-16 12:01:33

这不起作用,因为已经为指针定义了operator<。不可能重载内置类型上的运算符,因为所有对内置类型有意义的运算符都已定义。

This does not work because operator< is already defined for pointers. It is impossible to overload operators on built-in types because all of the operators that make sense for built-in types are already defined.

很快妥协2024-12-16 12:01:33

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

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 的好友,或者使其成为会员。

The compiler will want to turn your example into comparing the two pointer values. Having one parameter as a class type will tell it what it needs to know to resolve the overload.

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

Also, and I'm a bit rusty on this, but I think you have to declare the operator as a friend of S1, or make it a memeber.

倾城花音2024-12-16 12:01:33

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

  1. 重载运算符必须在类外部定义。
  2. 重载运算符必须声明为该类的友元函数或类。

这就是我的经验。

In my opinion, when you want to define a new operator which has more than one parameter.there are two things you must do.

  1. Overload operator must be defined outside of the class.
  2. The overload operator must be declared a friend functions or class of the class.

That's my experience.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文