Перегрузка оператора [] возвращает неверные данные - PullRequest
0 голосов
/ 15 апреля 2019

Я следовал учебнику по перегрузке операторов из TutorialsPoint .

Это мой класс:

struct Decimal {

private:
    int16_t  exponent;
    uint8_t  length;
    uint16_t mantissa[DecimalMaxSize]{};
...
public:
    uint16_t &operator[](int i);
...

и моя реализация:

uint16_t &Decimal::operator[](int i) {
    if( i > DecimalMaxSize ) {
        std::cout << "Index out of bounds" << std::endl;
        // return first element.
        return mantissa[0];
    }
    return mantissa[i];
}

Когда я теперь хочу использовать это так:

Decimal *d = new Decimal(...);
uint16_t di = d[i];

Я получаю следующую ошибку: «Неверное преобразование из десятичного в uint16_t»

Как я могу это исправить?

1 Ответ

2 голосов
/ 15 апреля 2019

d[i]; будет операцией для индексации массива Decimal объектов, поскольку d является указателем. Чтобы вызвать перегруженный operator [] для объекта itlsef, вы должны сначала разыменовать этот указатель и написать (*d)[i] или d->operator [](i);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...