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

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

Восстановить пароль Регистрация
 
Chelioss
179 / 179 / 4
Регистрация: 08.01.2011
Сообщений: 1,131
11.02.2012, 18:42     Перегрузка оператора [] #1
Сделал простой аналог 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++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
retmas
Жарю без масла
803 / 685 / 143
Регистрация: 13.01.2012
Сообщений: 1,580
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
Жарю без масла
803 / 685 / 143
Регистрация: 13.01.2012
Сообщений: 1,580
11.02.2012, 19:40     Перегрузка оператора [] #4
уберите оператор приведения. он не нужен
Yandex
Объявления
11.02.2012, 19:40     Перегрузка оператора []
Ответ Создать тему
Опции темы

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