Пре- и постфиксный инкременты в разных классах
Хочу реализовать примеси с реализацией определенных операторов, чтобы избежать дублирования кода. Но поместить операторы пре- и постфиксного инкремента в разные классы почему-то не получается. Пример:
class A
{
public:
A(){}
A& operator++(){return *this;}
};
class B
{
public:
B(){}
B operator++(int){return *this;}
};
class C:public A, public B
{
public:
C(){}
};
int main()
{
C c;
c++;
}
Вывод:
ошибка: запрос элемента «operator++» неоднозначен
c++;
^
замечание: претенденты: B& B::operator++(int)
B& operator++(int){return *this;}
^
замечание: A& A::operator++()
A& operator++(){return *this;}
Почему так происходит, и как можно это исправить?
Любопытно, что если убрать постфиксный оператор, то будет ошибка, что оператор не объявлен. Если поместить операторы в один класс, то ошибки нет.
Обновление
В моём случае подходит даже наследование B
от A
, но в этом случае, по мнению компилятора, не объявлен уже префиксный оператор.