Вызов методов из массива не меняет объект - PullRequest
0 голосов
/ 22 сентября 2019

Когда я пытаюсь вызвать метод из объекта внутри массива, изменение не сохраняется в остальной части кода.

В ходе некоторых поисков я обнаружил, что метод get() из массиванеобходимо вернуть переменную по ссылке, но когда я пытаюсь это сделать, появляются другие исключения.Поэтому я попытался использовать это:

template<typename T>
T& Vector<T>::get(int pos)
{
    if (pos > this->index || pos < 0)
    {
        return T&() ;
    }
    return &this->array[pos];
}

Но я получил ошибку:

ошибка C2760: синтаксическая ошибка: неожиданный токен ')', ожидаемое 'выражение'

Я новичок в C ++, и любая помощь приветствуется, спасибо заранее.

1 Ответ

1 голос
/ 22 сентября 2019

Во-первых, вам нужно объявить тип шаблона T в начале вашей функции.

template <typename T>

Во-вторых, вы не можете вернуть ссылку навременная переменная, как вы делаете здесь.(Это даже не правильный синтаксис, как прокомментировал Игорь.)

return T&();

Возможно, вы должны вместо этого выдать исключение.

throw std::out_of_range("Attempted to access out of bounds");

В-третьих, вы можете удалить this-> из своего кода.Функция уже дает вам доступ к полям вашей структуры.

Здесь вы можете получить этот действительный фрагмент кода.

template <typename T> T &Vector<T>::get(int pos) {
    if (pos > index || pos < 0) {
        throw std::out_of_range("Attepted to access out of bounds");
    }
    return array[pos];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...