J'ai ces codes:C++ Constructor pour le type Implicite Conversion
class Type2 {
public:
Type2(const Type1 & type);
Type2(int);
const Type2 & operator=(const Type2 & type2);
//....
};
...
Type1 t1(13);
Type2 t2(4);
t2=t1;
Comme je l'ai compris, les constructeurs de type2 à 1 argument chacun sans explicite mot-clé devrait signifier des objets Type1 ou des valeurs int peut être implicitement conveted aux objets Type2.
Mais à la dernière ligne t2 = t1;, MS Visual Studio me donne cette erreur de compilation:
....error C2679: binary '=' : no operator found which takes a right-hand operand of type 'Type1' (or there is no acceptable conversion)....
On dirait que MS Visual Studio insistant sur le fait t2 = t1; doit correspondre à un opérateur d'affectation avec lhs = Type2 et rhs = Type1. Pourquoi ne peut-il implicitement transtyper rhs en t2 et ensuite faire la copie avec l'opérateur Type2 = Type2?
Ce code compile bien pour moi dans VS2010. –
Je sais pourquoi. Parce que mon Type1 a un opérateur de conversion: class Type1 {operator Type2()}; – JavaMan
Puis-je fermer une question pour laquelle j'ai trouvé la réponse moi-même? – JavaMan