Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
MrAndrey_ka
77 / 77 / 2
Регистрация: 13.05.2009
Сообщений: 536
Записей в блоге: 1
#1

Перезагрузка операторов "неоднозначный operator" - C++

07.04.2013, 00:58. Просмотров 474. Ответов 1
Метки нет (Все метки)

Не знаю в ту ли группу пишу, но все же.... Для моего класса есть несколько операторов присвоения
const MyStr& operator +=(const MyStr& val);
const MyStr& operator +=(const WCHAR *val);
const MyStr& operator +=(const WCHAR val);
const MyStr& operator +=(const char * val);
const MyStr& operator +=(const char val);
const MyStr& operator +=(const int val);

все работает вроди бы нормально, но вот на код
C++
1
2
MyStr s("вапывэпжэ");
s +=s.Length();
ругается error C2593: неоднозначный "operator +="

как это обойт или что я не так написал?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.04.2013, 00:58     Перезагрузка операторов "неоднозначный operator"
Посмотрите здесь:

Перегрузка операторов: "operator #" - C++
Здравствуйте, подскажите пожалуйста. перегрузка оператора выглядит: void operator # (int i) В учебнике Шилдт перед словом operator...

"error C2872: неоднозначный символ" при переменной count - C++
В общем вчера взялся изучать C++ по книге "C++ Базовый курс, 3 издание" Г. Шилдта. И тут такая запара. #include <iostream> using...

Ошибка "sin: неоднозначный вызов перегруженной функции" - C++
Доброго времени суток! Объясните, пожалуйста, что означает ошибка "sin: неоднозначный вызов перегруженной функции", уже не в первый раз...

Ошибка при преобразовании числа в строку: "неоднозначный вызов перегруженной функции" - C++
вот сокращенный код #include <iostream> #include <string> #define N 5 using namespace std; struct charact...

Ошибка "неоднозначный вызов перегруженной функции" - C++
#include "stdafx.h" #include <iostream> #include <conio.h> #include "math.h" using namespace std; int count(int a,int b) ...

Ошибки компиляции: "Неоднозначный символ". - C++
#include "stdafx.h" #include <iostream> #include <string.h> using namespace System; using namespace std; class Double; ...

неоднозначный 'operator +' - C++
Розробка проекта МFC. Одно документный проект. Открытие файла для записи и в рядку додавания информации в файл ругается на это: ...

Перегрузка операторов "+" и "-" и бинарных - C++
здраствуйте помогите пожалуйста перегрузить операторы + и - бинарные у меня есть 2 списка "ск" и "сн"; и число "ч" в мейне это...

no operator found which takes a right/left-hand operand of type "AR" - C++
Нашел на форуме исходник программы, собрал, но выдает ошибку описанную выше #include <iostream> #include <conio.h> #include...

Вывод строки с cout: IntelliSense: no operator "<<" matches these operands - C++
ошибку выдает 3 IntelliSense: no operator &quot;&lt;&lt;&quot; matches these operands operand types are: std::ostream &lt;&lt;...

Написать перегрузку operator+() для класса "Массив" - C++
Добрый день, Подскажите, как выйти правильно из ситуации: Array&amp; Array::operator+(const Array&amp; obj) { Array temp; ...

бинарный "operator <<" имеет слишком мало параметров С++ - C++
Добрый вечер. Нужно в с++ cli сделать перегрузку &lt;&lt;. Подскажите пожалуйста, правильный синтаксис: Попытки угадать синтаксис: ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DU
1482 / 1058 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
07.04.2013, 01:11     Перезагрузка операторов "неоднозначный operator" #2
это зависит от того, что какой тип возвращает функция MyStr::Length();
логично что это какой-то интегральный тип. и вот если он отличается от
char, int или WCHAR, то потребуется преобразование в один из этих типов.
Если такие преобразования равнозначны, значит все три функции могут
подойти для вызова. А это как раз случай неоднозначности.
Компилятор хочет только одну функцию.
в общем нужно либо добавить еще один operator += с типом, совпадающим
с тем типом, который возвращает функция Length, либо явно кастить:
s += static_cast<int>(s.Length());
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru