C ++ - Überladungskonvertierungsoperator für benutzerdefinierten Typ in std :: string

Ich hoffe, jemand kann antworten, warum das Folgende nicht funktioniert. Aber ich bin immer noch ein Noob ... Ich kann einfach nicht verstehen, warum das folgende

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;
}

gibt mir einen Kompilierungsfehler:

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>]

Wenn ich die Zuordnung nicht versuche

s = t;

es funktioniert

Ich habe stundenlang versucht, die Fehlermeldung überhaupt zu verstehen, aber was mich am meisten verwundert, ist, dass es für char * funktioniert.

Ich bin für jeden Hinweis dankbar. Vielen Dank! Marku

Antworten auf die Frage(10)

Ihre Antwort auf die Frage