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

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

Войти
Регистрация
Восстановить пароль
 
Renji
1709 / 1142 / 270
Регистрация: 05.06.2014
Сообщений: 3,309
#1

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

07.07.2014, 08:46. Просмотров 318. Ответов 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++.
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.07.2014, 08:46     Странная перегрузка операторов (Error: ambiguous overload for 'operator[]')
Посмотрите здесь:

Error: call of overloaded ‘Function’ is ambiguous C++
Error C2668: 'sqrt' : ambiguous call to overloaded function C++
C++ Перегрузка operator[][][]
C++ Перегрузка operator new
operator+ overload C++
C++ Перегрузка operator->()
C++ Почему возникает ошибка? error: ambiguous overload for 'operator>>'
Перегрузка operator[]= C++
Перегрузка (Overload) C++
C++ Перегрузка operator=
C++ Перегрузка операторов: "operator #"
Проверить правильность кода. Вылезает Error 5 error C2679: binary '<<' : no operator found which takes a right C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zss
Модератор
Эксперт С++
 Аватар для zss
6126 / 5729 / 1853
Регистрация: 18.12.2011
Сообщений: 14,641
Завершенные тесты: 1
07.07.2014, 09:13     Странная перегрузка операторов (Error: ambiguous overload for 'operator[]') #2
C++
1
    t[std::string("")];
Nick Alte
Эксперт С++
1599 / 991 / 117
Регистрация: 27.09.2009
Сообщений: 1,911
Завершенные тесты: 1
07.07.2014, 09:13     Странная перегрузка операторов (Error: ambiguous overload for 'operator[]') #3
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Дело в причудливой особенности C: для него выражение a[b] означает то же самое, что и b[a], а именно *(a+b). Поэтому в данном случае компилятор не может понять - индексируется ли test строкой или строковый литерал целым числом, в которое можно превратить test.
Yandex
Объявления
07.07.2014, 09:13     Странная перегрузка операторов (Error: ambiguous overload for 'operator[]')
Ответ Создать тему
Опции темы

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