Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/10: Рейтинг темы: голосов - 10, средняя оценка - 4.50
Serg_GR
0 / 0 / 0
Регистрация: 30.05.2012
Сообщений: 12
#1

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

13.08.2012, 09:34. Просмотров 1957. Ответов 4
Метки нет (Все метки)

Создал класс в котором массив указателей на другой класс, перегрузил оператор взятия индекса []
следующим образом:
h-файл
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#ifndef HIM_TABL_H
#define HIM_TABL_H
#include "him_elem.h"
class him_tabl
{
    him_elem **m_Tablica;
    int size;
public:
    him_tabl(int cntElm);
    int getSize();
    void tabSave();
    him_elem* operator [](int index);
    ~him_tabl();
};
 
#endif // HIM_TABL_H
cpp-файл
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include "him_tabl.h"
#include "io_elm.h"
#include <QDebug>
 
him_tabl::him_tabl(int cntElm)
{
    m_Tablica = new him_elem*[cntElm];
    int j = 0;
    bool isElem;
    io_elm tabFile("him_tab.dat","Read");
    for(int i = 0; i < cntElm; i++)
    {
        m_Tablica[i] = new him_elem();
        isElem = tabFile.fin(m_Tablica[i]);
        if(isElem) j++;
        else break;
    }
    size = j;
}
him_tabl::~him_tabl()
{
    delete []m_Tablica;
}
him_elem *him_tabl::operator [](int index)
{
    if(index < 0 && index >= size)
        qDebug() << "Him table out of index";
    return m_Tablica[index];
}
int him_tabl::getSize()
{
    return size;
}
void him_tabl::tabSave()
{
    io_elm tabFile("him_tab.dat","ReWrite");
    for(int i = 0; i < size; i++)
    {
         tabFile.fout(m_Tablica[i]);
    }
}
при попытке взятия индекса в основной программе:
C++ (Qt)
1
2
3
4
5
6
    him_tabl *tabl = new him_tabl(118);
    curPos = 0;
    //Так:
    him_elem *test = *tabl[curPos];
    //Или так:
    him_elem *test = tabl[curPos];
Получаю сообщение об ошибке
test_ui.cpp:14: ошибка: C2440: инициализация: невозможно преобразовать "him_tabl" в "him_elem *"
Для выполнения данного преобразования нет доступного оператора преобразования, определенного пользователем, или вызов оператора невозможен
ЗАТУПИЛ!
Подскажите люди добрые, что я делаю не так?

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

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.08.2012, 09:34
Ответы с готовыми решениями:

Перегрузка оператора []
Проблема в том, что надо обязательно использовать вид obj, а не obj.arr. Иначе...

Перегрузка оператора +
Здравствуйте! Не могу понять, из-за чего появляется ошибка. Вот программа,...

Перегрузка оператора
Здравствуйте. Не могу разобраться, как перезагрузить оператор &gt;&gt;. int a;...

Перегрузка оператора ==
Пытаюсь перегрузить оператор == . Делаю так: В классе: class cData // класс...

Перегрузка оператора ==
Я уже встречала подобный вопрос на этом форуме, но у меня всё равно что-то не...

4
John Prick
831 / 764 / 256
Регистрация: 27.07.2012
Сообщений: 2,176
Завершенные тесты: 3
13.08.2012, 09:59 #2
C++
1
2
3
4
    //Так:
    him_elem *test = *tabl[curPos];
    //Или так:
    him_elem *test = tabl[curPos];
Так на какой конкретно случай ругается?
Попробуйте так:
C++
1
him_elem *test = (*tabl)[curPos];
Или вообще вызывайте оператор [] как обычную функцию, чтобы понять, где "сидит" ошибка:
C++
1
him_elem *test = tabl->operator[](curPos);
1
Serg_GR
0 / 0 / 0
Регистрация: 30.05.2012
Сообщений: 12
13.08.2012, 10:06  [ТС] #3
Ругалась на оба случая!
В приведенном вами варианте (*tabl)[curPos] проходит нормально!
Спасибо!
0
John Prick
831 / 764 / 256
Регистрация: 27.07.2012
Сообщений: 2,176
Завершенные тесты: 3
13.08.2012, 10:10 #4
Смысл скобок - указать порядок выполнения операции: сначала разыменовать указатель, затем приметить оператор [], который возвращает нужный тип. Без скобок получалось наоборот: сначала мы применяли оператор [] к указателю (получали бы, кстати, неизвестно что), а потом разыменовывали указатель, получая тип, на который он указывает. Отсюда и ошибка.
0
Serg_GR
0 / 0 / 0
Регистрация: 30.05.2012
Сообщений: 12
13.08.2012, 10:13  [ТС] #5
Я уже понял!
Спасибо еше раз!
0
13.08.2012, 10:13
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.08.2012, 10:13

перегрузка оператора!
Помогите сложить диагонали , при помоши перегрузки оператора+, чтобы можно было...

Перегрузка оператора [][]
допустим у меня есть клас Matrix и я хочу опедилить оператор доступа к его...

Перегрузка оператора =
Ввести строку символов S1. Программа должна содержать перегруженную операцию...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru