1659 / 488 / 106
Регистрация: 17.05.2015
Сообщений: 1,497
|
||||||
1 | ||||||
Неявные приведения типов, error: ambiguous overload for ‘operator=’26.04.2019, 15:14. Показов 3767. Ответов 1
Всем привет!
Как заставить код работать без костыля? https://rextester.com/SHUYH87895
Код
Error(s): source_file.cpp: In function ‘int main()’: source_file.cpp:63:12: error: ambiguous overload for ‘operator=’ (operand types are ‘str_t {aka std::__cxx11::basic_string<char>}’ and ‘record’) assign = rec; // error: ambiguous overload for ‘operator=’ ^ In file included from /usr/include/c++/5/string:52:0, from /usr/include/c++/5/bits/locale_classes.h:40, from /usr/include/c++/5/bits/ios_base.h:41, from /usr/include/c++/5/ios:42, from /usr/include/c++/5/ostream:38, from /usr/include/c++/5/iostream:39, from source_file.cpp:1: /usr/include/c++/5/bits/basic_string.h:550:7: note: candidate: std::__cxx11::basic_string<_CharT, _Traits, _Alloc>& std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::operator=(const std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>] operator=(const basic_string& __str) ^ /usr/include/c++/5/bits/basic_string.h:558:7: note: candidate: std::__cxx11::basic_string<_CharT, _Traits, _Alloc>& std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::operator=(const _CharT*) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>] operator=(const _CharT* __s) ^
0
|
26.04.2019, 15:14 | |
Ответы с готовыми решениями:
1
Странная перегрузка операторов (Error: ambiguous overload for 'operator[]') Почему возникает ошибка? error: ambiguous overload for 'operator>>' Error: ambiguous overload for 'operator<<' (operand types are 'std::ofstream {aka std::basic_ofstream<char>}' Ambiguous overload for 'operator+' (operand types are 'int' and 'Rational') |
Мозгоправ
|
||||||||||||||||
27.04.2019, 17:03 | 2 | |||||||||||||||
Всё правильно. В вашем классе определены два оператора преобразования типа:
std::string (в смысле для std::basic_string<char, std::char_traits<char>, std::allocator<char>> ) определены операторы присваивания как для const std::string , так и для const char* . И компилятор в недоумении: какой из методов вы имели ввиду.Можно
const str_t& str() грохнуть.PS. Не понял, зачем вам шаблоны. Допустим, что в шаблон конструктора прилетел тип int . Вызвался record& operator= , параметризованный int-ом. Получили присваивание std::string = int. И чо?
0
|
27.04.2019, 17:03 | |
27.04.2019, 17:03 | |
Помогаю со студенческими работами здесь
2
Error C2593: 'operator +=' is ambiguous Неявные приведения в операциях operator+ overload Неявные преобразования типов Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |