Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
14 / 14 / 1
Регистрация: 14.03.2015
Сообщений: 113

Перегрузка оператора []

03.01.2016, 13:05. Показов 1333. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Пробую перегрузить оператор [].

C++
1
2
3
4
5
6
7
8
9
10
11
12
template <class Element>
class List
{
public:
    struct Node
    {
        Element el;
        Node *next;
    };
    Node *head;
    Node* operator [](int);
};
C++
1
2
3
4
5
6
7
8
9
10
11
12
template<class Element>
List<Element>::Node * List<Element>::operator[](int) //тут ошибка
{
    int size = countnodes();
    if (size < int) return NULL;
    int count = 0; Node *temp = head;
    while (count != num) {
        count++;
        temp = temp->next;
    }
    return temp;
}
синтаксическая ошибка: идентификатор "Node"
Что я сделал не так?
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
03.01.2016, 13:05
Ответы с готовыми решениями:

Перегрузка оператора
Доброго всем времени. пытаюсь написать свой класс надстройка на одномерный массив. У меня вот возникло затруднение с перегрузками...

Перегрузка оператора =
Нужно перегрузить оператор так что бы в начале строки и в конце были квадратные скобки . Все почти работает только вот вывод на экран не...

Перегрузка оператора <<
Здравствуйте! Подскажите, пожалуйста, как выполнить перегрузку оператора &lt;&lt;? Для двух классов: class A { public:

7
 Аватар для _Valera_
495 / 377 / 136
Регистрация: 27.01.2015
Сообщений: 1,588
03.01.2016, 14:48
шаблонный класс реализовывается в одном файле

Добавлено через 35 секунд
Цитата Сообщение от fitochay Посмотреть сообщение
Node* operator [](int);
};
Цитата Сообщение от fitochay Посмотреть сообщение
List<Element>::Node * List<Element>::operator[](int
это разные функции
0
14 / 14 / 1
Регистрация: 14.03.2015
Сообщений: 113
03.01.2016, 14:52  [ТС]
_Valera_, у меня в одном. а почему разные?
0
 Аватар для _Valera_
495 / 377 / 136
Регистрация: 27.01.2015
Сообщений: 1,588
03.01.2016, 14:53
Цитата Сообщение от fitochay Посмотреть сообщение
_Valera_, у меня в одном. а почему разные?
ну может и одинаковые, я мельком глянул...
0
14 / 14 / 1
Регистрация: 14.03.2015
Сообщений: 113
03.01.2016, 16:34  [ТС]
оставил описание в классе. Однако теперь другая ошибка. Перегрузил наверное неправильно.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
template <class Element>
class List
{
public:
    struct Node
    {
        Element el;
        Node *next;
    };
    Node *head;
bool isempty();
    void popback();
    Node* operator [](int num) {
        int size = countnodes();
        if (size < int) return NULL;
        int count = 0; Node *temp = head;
        while (count != num) {
            count++;
            temp = temp->next;
        }
        return temp;
    }
};
C++
1
2
3
4
5
6
7
8
9
template<class Element>
inline void List<Element>::popback()
{
    if (!isempty()) {
        int size = countnodes();
        Node *temp = new Node;
        temp = this[size - 1]; //тут ошибка
    }
}
=: невозможно преобразовать "List<Element>" в "List<Element>::Node *"
0
 Аватар для _Valera_
495 / 377 / 136
Регистрация: 27.01.2015
Сообщений: 1,588
03.01.2016, 16:47
Цитата Сообщение от fitochay Посмотреть сообщение
Node *temp
и
Цитата Сообщение от fitochay Посмотреть сообщение
List<Element>
разные типы так и сказано. Хз я так без иде и не скажу...

Цитата Сообщение от fitochay Посмотреть сообщение
void popback() ;
реализация прям на месте должна быть, в классе.

Цитата Сообщение от fitochay Посмотреть сообщение
template<class Element>
inline void List<Element>:: popback()
Цитата Сообщение от fitochay Посмотреть сообщение
template <class Element>
class List

кто сказал что эти типы совпадают?
0
14 / 14 / 1
Регистрация: 14.03.2015
Сообщений: 113
03.01.2016, 16:57  [ТС]
_Valera_, про разные типы понятно. Неясно почему, если при перегрузке я возвращаю Node* (мб чего в перегрузке не понимаю);
не вижу особой разницы где описывать метод.
про типы не понял
0
19496 / 10101 / 2461
Регистрация: 30.01.2014
Сообщений: 17,808
03.01.2016, 17:23
Лучший ответ Сообщение было отмечено fitochay как решение

Решение

Цитата Сообщение от fitochay Посмотреть сообщение
temp = this[size - 1];
C++
1
temp = (*this)[size - 1];
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
03.01.2016, 17:23
Помогаю со студенческими работами здесь

Перегрузка оператора <<
Пишу класс My_String #include &lt;iostream&gt; const int MAX = 1000; class My_String { private: char str; public:

Перегрузка оператора []
Есть: class any{ char arr }

Перегрузка оператора ++
выводит не то значение привет. нужна Ваша подсказка. листинг из учебника: (тема: перегрузка оператора ++) #include &lt;iostream&gt; ...

Перегрузка оператора <<
Здравствуйте форумчане, помогите исправить ошибку. Вообщем есть класс с перегруженным оператором &lt;&lt; . Category.h class...

Перегрузка оператора =
Скажи пожалуйста в каких случаях нужно перегружать оператор = ?


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
Установка Emscripten SDK (emsdk) и CMake на Windows для сборки C и C++ приложений в WebAssembly (Wasm)
8Observer8 30.01.2026
Чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. Система контроля версиями Git. . .
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru