Пробовал C++ 11 с g ++ 5.3.1 на некоторое время ... Я думал, что понял неявные операторы преобразования. Вообще говоря, , если я определяю Class3::operator Class2()
, тогда я могу передать Class3
непосредственно в любую функцию, которая принимает Class2
. Кажется работать 99% времени ... Но я столкнулся с простым примером, где это не тот случай.Неявное преобразование C++ не работает
class Class1 {};
class Class2 {
public:
inline friend Class1 & operator<<(Class1 & a, Class2 const& c)
{return a;}
};
class Class3 {
public:
inline operator Class2() const {return Class2();}
};
void Foo(Class2 c) {}
int main()
{
Class1 c1;
Class3 c3;
// g++ does not like this:
// error: no match for 'operator<<' (operand types are 'Class1' and 'Class3')
// c1 << c3;
// g++ likes these just fine:
Foo(c3);
c1 << Class2(c3);
}
Любые идеи, что я сделал не так? Пожалуйста, помогите! Благодарю.
Вы не определили перегрузку '' '' '' 'для класса 3, поэтому g ++ не нравится. Вы конвертируете Class3 'c3' в Class2, который является определенным вами оператором преобразования. g ++ нравится, потому что вы его определили. Будьте похожи на g ++. – Poriferous
Какое сообщение об ошибке вы получаете? –
@Poriferous Я не вижу, как это все объясняет. –