MSVC++2005 'my_class::operator []' : 2 overloads have similar conversions

программирование C++ С++

Есть некоторый класс. У него перегружен оператор [], возвращающий один символ. Также есть метод, сериализующий класс в стоку, для записи на диск и передачи по сети.

Так как результат сереализации часто нужно передавать в API, решил упростить себе жизнь и перегрузить преобразование объекта к сроке. В итоге имеем такой заголовок (в my_library.h):

class my_class
{
public:
char operator[](const unsigned int pos) const;
const char * serialize() const;
operator const char * () const {return serialize()}; //новый метод
};

Но теперь перестал работать оператор[]

например в выражении вида
my_class var;

char a = var[0];

получаю ошибку:

main.cpp(68) : error C2666: 'my_class::operator []' : 2 overloads have similar conversions
my_library.h(21): could be 'char my_class::operator [](const unsigned int) const'
or 'built-in C++ operator[(const char *, int)'
while trying to match the argument list '(my_class, int)'

Я понимаю, что он (компилятор) пытается выполнить, но я не понимаю почему прямой вызов оператора и вызов с промежуточной конвертацией имеют одинаковый приоритет?

И как это можно исправить, не отказываясь от перегруженных операторов?

Примечание:
Печально это, что нельзя одновременно перегружать тайпкаст в указатель и поэлементный доступ :(
Ответы:


12 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.