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

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

Восстановить пароль Регистрация
 
Renji
1535 / 983 / 240
Регистрация: 05.06.2014
Сообщений: 2,963
07.07.2014, 08:46     Странная перегрузка операторов (Error: ambiguous overload for 'operator[]') #1
Что-то я туплю. Есть код:
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[]')
Посмотрите здесь:

C++ Перегрузка operator+
error: call of overloaded ‘Function’ is ambiguous C++
error C2668: 'sqrt' : ambiguous call to overloaded function C++
operator+ overload C++
C++ Перегрузка operator->()
C++ Почему возникает ошибка? error: ambiguous overload for 'operator>>'
Error: ambiguous overload for 'operator<<' (operand types are 'std::ofstream {aka std::basic_ofstream<char>}' C++
Перегрузка operator[]= C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zss
Модератор
Эксперт С++
 Аватар для zss
5950 / 5555 / 1786
Регистрация: 18.12.2011
Сообщений: 14,195
Завершенные тесты: 1
07.07.2014, 09:13     Странная перегрузка операторов (Error: ambiguous overload for 'operator[]') #2
C++
1
    t[std::string("")];
Nick Alte
Эксперт С++
1590 / 982 / 115
Регистрация: 27.09.2009
Сообщений: 1,897
Завершенные тесты: 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[]')
Ответ Создать тему
Опции темы

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