Ошибка: неверная инициализация ссылки типа - PullRequest
0 голосов
/ 28 февраля 2020

Итак, у меня есть классы Sensor, Car и Agency, где класс Agency принимает класс Car, а класс Car принимает класс Sensor. В моем исходном файле для класса Agency у меня есть ошибка для моего оператора [] `\ function, и это говорит, что

error: invalid initialization of reference of type Agency& from expression of type Car
  return *invtptr;  

Моя operator[] функция должна быть методом для индексации посредством ссылки объект данных m_inventory, где он позволяет получить доступ к инвентарю агентства.

Вот моя operator[] функция:

Agency &Agency::operator[](int index) {
    Car *invtptr = this->m_inventory;
    if (index < 0 || index > 5) {
        cout << "Array is out of bounds, exiting";
        exit(0);
    }
    else {
        for (int i = 0; i < index; i++) {
            invtptr++;
        }   
    }
    return *invtptr;
}

, а вот частные члены из моего заголовка файл для класса автомобиля:

private:
        char m_make[256], m_model[256], m_owner[256];   
        int m_year, m_sensoramnt;
        Sensor m_sensor[3];
        float m_baseprice, m_finalprice;
        bool m_available;

и вот личные члены из моего файла заголовка для класса агентства:

private:
        char m_name[256];
        int m_zipcode[5];
        Car m_inventory[5];

Ответы [ 2 ]

2 голосов
/ 28 февраля 2020

Проблема в вашем типе возврата. Посмотрите на прототип функции:

Agency &Agency::operator[](int index);

Ожидается, что вы вернете Agent, но вы возвращаете автомобиль. См выдержки из вашего кода:

Car *invtptr = this->m_inventory;
...
return *invtptr;

Вам нужно изменить свою функцию на:

Car& Agency::operator[](int index);
0 голосов
/ 28 февраля 2020

Это потому, что вы пытаетесь инициализировать ссылку типа Agency& (в функции return) из выражения типа Car (который является типом *invtptr).

...