У меня есть следующие ситуации:оператор = неоднозначность в соединении с операторами преобразования
class B;
class A {
private:
int n;
public:
A& operator=(const A& a) {
}
A& operator=(const int n) {
this->n = n;
}
friend class B;
};
class B {
private:
A a;
public:
operator A&() {
return a;
}
operator int&() {
return a.n;
}
};
Когда я выполнить этот код:
A a;
B b;
int i = b;
a = b;
a = i;
У меня есть следующее сообщение об ошибке:
error C2593: 'operator =' is ambiguous
..\CrossPPTest\TestProxy.cpp(40): could be 'A &A::operator =(const int)'
..\CrossPPTest\TestProxy.cpp(37): or 'A &A::operator =(const A &)'
while trying to match the argument list '(A, B)'
Как разрешить эту двусмысленность, если я не могу добавить
A& operator =(const B&)
в класс A.
Есть сложные причины, по которым я должен делать именно так, но было бы очень хорошо, если бы такая вещь работала.
Может быть, есть некоторые приоритеты или что-то вроде явного ключевого слова для операторов ... Любые предложения приветствуются.
ОБНОВЛЕНИЕ: Любые виды отливок не могут использоваться во второй части кода. Дело в том, чтобы найти решение, изменяющее только первую часть кода.
ОДИН БОЛЬШЕ ОБНОВЛЕНИЯ: Код №2 ДОЛЖЕН компилироваться как есть.
Используйте явное литье. –
@SethCarnegie Я знаю о явных приведениях, но спасибо. Причина, по которой я не могу ее использовать, заключается в том, что вторая часть кода будет написана другими разработчиками, и я хочу сделать ее максимально простой. – strannik
Если вы знаете о явных приведениях и не хотите их использовать, почему бы вам не поместить это в свой вопрос. –