Надеюсь, кто-то может ответить, почему следующее не работает. Медведь со мной, хотя я до сих пор очень нуб ... Я просто не могу добраться до сути, почему следующееC++ перегрузка оператора преобразования для настраиваемого типа в std :: string
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;
}
дает мне ошибку времени компиляции:
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>]
Если я не пытайтесь выполнить назначение
s = t;
это действительно работа.
Я пытался часами осмыслить сообщение об ошибке, но то, что меня больше всего озадачивает, это то, что работает на char *.
Я благодарен за любой намек. Спасибо! Markus
Так что означает, что оператор станд :: строка =() и мои TestClass :: Оператор станд :: строка() конкурируют за работу? – Markus
@Markus: поскольку другие были достаточно любезны, чтобы объяснить, оператор присваивания перегружен и может обрабатывать более одного типа, для которого ваш класс имеет неявное преобразование. –