Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Chelioss
179 / 179 / 4
Регистрация: 08.01.2011
Сообщений: 1,131
#1

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

11.02.2012, 18:42. Просмотров 650. Ответов 3
Метки нет (Все метки)

Сделал простой аналог auto_ptr для дин. массива.
Файл
Array_ptr.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#ifndef ARRAY_PTR_GUARD
#define ARRAY_PTR_GUARD
 
template< class Ty_ >
class Array_ptr {
public:
    explicit Array_ptr( Ty_* ptr )
        : m_ptr( ptr )
    { }
    ~Array_ptr() { delete [] m_ptr; }
 
    Ty_& operator [] ( const unsigned int i ) { return m_ptr[i]; }
    const Ty_& operator [] ( const unsigned int i ) const { return m_ptr[i]; }
    operator Ty_* () { return m_ptr; }
private:
    Ty_* m_ptr;
};
 
 
#endif //ARRAY_PTR_GUARD


C++
1
2
Array_ptr< char > infix( new char[ strlen(str) + 1 ] ); 
infix[ i ] = ' ';
Во второй строке компилятор дает ошибку:
ошибка
error C2666: Array_ptr<Ty_>::operator []: для 3 перегрузок есть подобные преобразования
1> with
1> [
1> Ty_=char
1> ]
1> array_ptr.h(13): может быть 'const char &Array_ptr<Ty_>::operator [](const unsigned int) const'
1> with
1> [
1> Ty_=char
1> ]
1> array_ptr.h(12): или 'char &Array_ptr<Ty_>::operator [](const unsigned int)'
1> with
1> [
1> Ty_=char
1> ]
1> или 'встроенный оператор C++[(char *, int)'
1> при попытке сопоставить список аргументов '(Array_ptr<Ty_>, int)'
1> with
1> [
1> Ty_=char
1> ]
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.02.2012, 18:42     Перегрузка оператора []
Посмотрите здесь:

Перегрузка оператора == C++
C++ Перегрузка оператора ==
C++ Перегрузка оператора <<
C++ Перегрузка оператора []
Перегрузка оператора () C++
Перегрузка оператора == C++
Перегрузка оператора [] C++
C++ Перегрузка оператора =
C++ Перегрузка оператора ++
C++ Перегрузка оператора <<
C++ Перегрузка оператора >>
Перегрузка оператора new[] C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
retmas
Жарю без масла
841 / 723 / 157
Регистрация: 13.01.2012
Сообщений: 1,668
11.02.2012, 18:53     Перегрузка оператора [] #2
Цитата Сообщение от Chelioss Посмотреть сообщение
C++
1
operator Ty_* () { return m_ptr; }
определяете неявное приведение типов.
поэтому компилятор не знает, как индексировать:
то ли использовать infix.operator [](i)
то ли infix.operator char* [i] (то же самое, что ((char*)infix)[i] )
Chelioss
179 / 179 / 4
Регистрация: 08.01.2011
Сообщений: 1,131
11.02.2012, 19:03  [ТС]     Перегрузка оператора [] #3
А как сделать правильно?
retmas
Жарю без масла
841 / 723 / 157
Регистрация: 13.01.2012
Сообщений: 1,668
11.02.2012, 19:40     Перегрузка оператора [] #4
уберите оператор приведения. он не нужен
Yandex
Объявления
11.02.2012, 19:40     Перегрузка оператора []
Ответ Создать тему
Опции темы

Текущее время: 16:25. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru