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

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

Войти
Регистрация
Восстановить пароль
 
Renji
1916 / 1314 / 298
Регистрация: 05.06.2014
Сообщений: 3,757
#1

Странная перегрузка операторов (Error: ambiguous overload for 'operator[]') - C++

07.07.2014, 08:46. Просмотров 346. Ответов 2
Метки нет (Все метки)

Что-то я туплю. Есть код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include<string>
struct test
{
    int operator[](const std::string&)const{return 0;}
    operator int()const{return 0;}
};
int main()
{
    test t;
    t[""];
    return 0;
}
Компилятор ругается на t[""]; что "error: ambiguous overload for 'operator[]' in 't[""]'". Если убрать operator int, ругань волшебным образом пропадает. В чем собственно дело? operator int на operator [] по идее вообще никак влиять не должен. Не указатель же возвращает.

Если играет роль, в качестве компилятора установлен g++.
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.07.2014, 08:46
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Странная перегрузка операторов (Error: ambiguous overload for 'operator[]') (C++):

Почему возникает ошибка? error: ambiguous overload for 'operator>>' - C++
class planet { protected: double distance; int revolve; public: planet(double d, int r) {distance=d; revolve=r;} };...

Error: ambiguous overload for 'operator<<' (operand types are 'std::ofstream {aka std::basic_ofstream<char>}' - C++
на #define LOG(Variable) Log&lt;&lt;&quot;&lt;&quot;;...

operator+ overload - C++
#include &lt;iostream&gt; class point { private: int x; int y; public:

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

Перегрузка (Overload) - C++
Здравствуйте, форумчане!:) Помогите, пожалуйста, реализовать 2 задачи с уже имеющейся программой. 1. Перегрузку (overload). Я так и не...

Class & operator's |Error: undefined reference to operator - C++
Компилирует нормально, но когда хочу использовать оператор выдает ошибку:undefined reference to 'operator..(Fraction const&amp;, Fraction...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
zss
Модератор
Эксперт С++
6380 / 5945 / 1927
Регистрация: 18.12.2011
Сообщений: 15,264
Завершенные тесты: 1
07.07.2014, 09:13 #2
C++
1
    t[std::string("")];
0
Nick Alte
Эксперт С++
1637 / 1009 / 119
Регистрация: 27.09.2009
Сообщений: 1,945
Завершенные тесты: 1
07.07.2014, 09:13 #3
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Дело в причудливой особенности C: для него выражение a[b] означает то же самое, что и b[a], а именно *(a+b). Поэтому в данном случае компилятор не может понять - индексируется ли test строкой или строковый литерал целым числом, в которое можно превратить test.
2
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.07.2014, 09:13
Привет! Вот еще темы с ответами:

Error: call of overloaded ‘Function’ is ambiguous - C++
log.cpp:166:25: error: call of overloaded ‘localtime_r(time_t*, tm*)’ is ambiguous log.cpp:166:25: note: candidates are: ...

Что такое "перегрузка операторов"? Каковы принципы работы перегруженных операторов и назначение указателя this - C++
Добрый день . Помогите понять принцип работы перегрузки операторов. объясните пожалуйста в зависимости от чего зависит агрумент при...

Проверить правильность кода. Вылезает Error 5 error C2679: binary '<<' : no operator found which takes a right - C++
Компилятор ругается на ошибку Error 5 error C2679: binary '&lt;&lt;' : no operator found which takes a right-hand operand of type 'Kniga' ...

Error C2668: 'sqrt' : ambiguous call to overloaded function - C++
Собственно задание: треугольник задан координатами своих вершин. Найти его периметр и площадь Вот Код,но он почему не работате выдает...


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

Или воспользуйтесь поиском по форуму:
Ответ Создать тему
Опции темы

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