2725 / 1888 / 560
Регистрация: 05.06.2014
Сообщений: 5,504
1

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

07.07.2014, 08:46. Показов 844. Ответов 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.07.2014, 08:46
Ответы с готовыми решениями:

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

Неявные приведения типов, error: ambiguous overload for ‘operator=’
Всем привет! Как заставить код работать без костыля? https://rextester.com/SHUYH87895 ...

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

Ambiguous overload for 'operator+' (operand types are 'int' and 'Rational')
Решал задачку, все делал по презентации. Создал класс рациональных чисел. Нужно перегрузить...

2
Модератор
Эксперт С++
11333 / 9303 / 5586
Регистрация: 18.12.2011
Сообщений: 24,818
07.07.2014, 09:13 2
C++
1
    t[std::string("")];
0
Эксперт С++
1667 / 1039 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
07.07.2014, 09:13 3
Дело в причудливой особенности C: для него выражение a[b] означает то же самое, что и b[a], а именно *(a+b). Поэтому в данном случае компилятор не может понять - индексируется ли test строкой или строковый литерал целым числом, в которое можно превратить test.
2
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.07.2014, 09:13

Error C2593: 'operator +=' is ambiguous
вообщем тема такая учусь програмить все когда то этим занимались, вот запоролся на вводе текста с...

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

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

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


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

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

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