Espero que alguien pueda responder por qué lo siguiente no funciona. Oso con mí, sin embargo, sigo siendo en gran medida un novato ... No puedo llegar al fondo de por qué la siguienteOperador de conversión de sobrecarga C++ para tipo personalizado a std :: cadena
using namespace std;
#include <string>
#include <iostream>
class testClass
{
public:
operator char*() {return (char*)"hi";};
operator int() {return 77;};
operator std::string () {return "hello";};
};
int main()
{
char* c;
int i;
std::string s = "goodday";
testClass t;
c = t;
i = t;
s = t;
cout<< "char: " << c << " int: " << i << " string: "<<s<<endl;
return 0;
}
me da un error de tiempo de compilación:
myMain.cpp: In function ‘int main()’:
myMain.cpp:23: error: ambiguous overload for ‘operator=’ in ‘s = t’
/usr/include/c++/4.2.1/bits/basic_string.h:500: note: candidates are: std::basic_string<_CharT, _Traits, _Alloc>& std::basic_string<_CharT, _Traits, _Alloc>::operator=(const std::basic_string<_CharT, _Traits, _Alloc>&) [with _CharT = char, _Traits = std::char_traits<char>, _Alloc = std::allocator<char>]
/usr/include/c++/4.2.1/bits/basic_string.h:508: note: std::basic_string<_CharT, _Traits, _Alloc>& std::basic_string<_CharT, _Traits, _Alloc>::operator=(const _CharT*) [with _CharT = char, _Traits = std::char_traits<char>, _Alloc = std::allocator<char>]
/usr/include/c++/4.2.1/bits/basic_string.h:519: note: std::basic_string<_CharT, _Traits, _Alloc>& std::basic_string<_CharT, _Traits, _Alloc>::operator=(_CharT) [with _CharT = char, _Traits = std::char_traits<char>, _Alloc = std::allocator<char>]
Si yo no intente la asignación
s = t;
funciona.
He estado intentando durante horas incluso comprender el mensaje de error, pero lo que más me desconcierta es que funciona para char *.
Agradezco cualquier pista. Gracias! Markus
Eso significa que operador std :: string =() y mis TestClass :: operador std :: string() están compitiendo por el trabajo? – Markus
@Markus: como otros tuvieron la amabilidad de explicar, el operador de asignación está sobrecargado y puede manejar más de uno de los tipos para los que su clase tiene una conversión implícita. –