视觉C++ |限定符必须是 "Foo" 的基类
Visual C++ | qualifier must be a base class of "Foo"
为什么以下代码
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&); ^
- 不能将二进制运算符函数任意重载为类成员运算符函数(请参阅运算符重载)
- 不能引用
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::
。
相关文章:
- std::具有相同基类的类的变体
- 是否可以初始化不可复制类型的成员变量(或基类)
- 在C++中,是否可以基于给定的标识符创建基类的新实例,反之亦然
- 基类中的函数名称解析
- C++初始化基类
- 如何通过派生类函数更改基类中的向量
- 如何定义一个纯抽象基类
- 如何使用基类指针引用派生类成员
- 继承:构造函数,初始化C++11中基类的类C数组成员
- 使用基类指针创建对象时,缺少派生类析构函数
- 如何引用基类的派生类?
- 如果基类包含双指针成员,则派生类的构造函数
- 在模板基类中为继承类中的可选重写生成虚拟方法
- 为什么此派生对象无法访问基类的后递减方法?
- 公开最直接的基类模板名称
- 当基类是依赖类型时,这是一个缺陷吗
- 如何使基类的运算符对基类的可变参数数可见(请参阅下面的代码)?
- 模板基类中的静态变量
- C++ 继承:将子类传递给需要基类的函数并获取子类行为
- 视觉C++ |限定符必须是 "Foo" 的基类