视觉C++ |限定符必须是 "Foo" 的基类

Visual C++ | qualifier must be a base class of "Foo"

本文关键字:Foo 基类 C++ 视觉      更新时间:2023-10-16

为什么以下代码

class Foo {
public:
    bool std::operator==(const Foo&, const Foo&);
};

出现错误"限定符必须是"Foo"的基类"

我在这里得到了一个不同的(可能更合理的)错误消息:

main.cpp:4:48: error: invalid use of '::'
     bool std::operator==(const Foo&, const Foo&);
                                            ^ 
  1. 不能将二进制运算符函数任意重载为类成员运算符函数(请参阅运算符重载)
  2. 不能引用std命名空间执行此操作

你可能想要的是

class Foo {
public:
    bool operator==(const Foo&) const;
};

如果您真的确定要在std::命名空间中重载它,您可以写:

namespace std {
    bool operator==(const Foo& op1, const Foo& op2) {
        return op1.operator==(op2);
    }
} 

或者简单地重载全局命名空间中的二进制operator==()函数:

bool operator==(const Foo& op1, const Foo& op2) {
    return op1.operator==(op2);
}

类内二进制operator的左侧有一个隐式Foo const &。因此,应该只包含一个Foo const &作为参数,而不是两个。

edit:另外,正如另一个答案中所提到的,在这种情况下,您也必须删除std::