【发布时间】:2015-02-20 05:53:34
【问题描述】:
我想创建重载运算符的特征,以避免代码重复。但是当我尝试将前置和后置增量运算符放在不同的类中时,编译器会给我一个错误:“运算符 ++ 不明确”代码:
class A
{
public:
A& operator++(){return *this;}
};
class B
{
public:
B operator++(int){return *this;}
};
class C:public A, public B
{
};
int main()
{
C c;
c++;
++c;
}
在我的情况下,可以从 A 继承 B,但是编译器找不到后增量运算符。为什么会出现这种情况,正确的方法是什么?
【问题讨论】:
-
Clang 接受代码。 GCC 错误?
-
如果 B 继承自 A,那么您在这种情况下看到的是 name hidden。
-
@immibis 谢谢,谷歌搜索后,我已将
using A::operator++;添加到B课程中,并且成功了。 -
@Brian 似乎是这样。 gcc.goodbolt 上所有版本的 gcc 都拒绝编译此代码。