Maison > Article > développement back-end > Pourquoi la conversion implicite d'un objet personne en chaîne entraîne-t-elle un échec de résolution de surcharge ?
Les conversions implicites de chaînes sont généralement déconseillées, une surcharge d'opérateur pour Person étant une solution plus appropriée. Cependant, examinons le code suivant pour illustrer le problème :
<code class="cpp">#include <string> #include <ostream> #include <iostream> struct NameType { operator std::string() { return "wobble"; } }; struct Person { NameType name; }; int main() { std::cout << std::string("bobble"); std::cout << "wibble"; Person p; std::cout << p.name; // Error occurs here }</code>
Le code se compile sans erreur lors de l'utilisation de GCC 4.3.4, donnant le résultat :
<code class="Bash">bobble wibble</code>
Cependant, en essayant de convertir implicitement l'objet Person en chaîne à l'aide de << l'opérateur échoue avec une erreur de résolution de surcharge :
<code class="Bash">prog.cpp:18: error: no match for ‘operator<<’ in ‘std::cout << p.Person::name’</code>
Dans ce cas, l'opérateur << est surchargé pour gérer std::string et const char*, cependant, il n'existe pas de surcharge prédéfinie qui accepte un objet Person et le convertit implicitement en chaîne. En conséquence, le compilateur ne parvient pas à résoudre la surcharge.
Pour remédier à ce problème, vous devez définir un opérateur explicite << pour la structure Person en tant que fonction ami, permettant à la conversion implicite d'un objet Person en chaîne de fonctionner correctement.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!