| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Для новичков > Pointer to reference in [] operator |
| Автор: RomanEEP 3.10.2012, 12:51 | ||||||
У меня объявлена переменная такого template класса:
Внутри класса RPArray объявлен оператор
Как мне получить указать на, к примеру, 1 элемент этого списка? Я делаю так:
и получаю ошибку: error C2440: 'initializing' : cannot convert from 'RPArray<Type>' to 'MbContour * |
| Автор: bsa 3.10.2012, 13:15 |
| RomanEEP, во-первых, когда ты определил указатель m_contourList на RPArray<MbContour>, то компилятор сразу тебе сделал стандартный оператор []. Думаю, тебе для начала нужно определять не указатель, а объект класса RPArray<MbContour*> (обрати внимание, где находится звездочка - это важно). во-вторых, твой оператор [] возвращает ссылку на указатель. Скорее всего это неправильно, так как кто-то сможет случайно подпортить этот указатель. |
| Автор: math64 3.10.2012, 13:32 |
| Просто поленились писать два оператора [] : Type *& operator []( size_t loc ) и Type * operator []( size_t loc ) const |
| Автор: RomanEEP 3.10.2012, 14:52 | ||
| ясно. Так есть возможность получить указатель из списка если объявить его так: RPArray<MbContour*> я его объявил так и тем не менее конструкция
выдает ту же ошибку |
| Автор: math64 4.10.2012, 08:21 |
| Там * не нужна, т.е. RPArray<MbContour>. RPArray всегда хранит только указатели. |
| Автор: RomanEEP 4.10.2012, 10:54 |
| ясно. тогда как мне к этому RPArray обратиться чтобы получить этот указатель? |
| Автор: Result 4.10.2012, 21:29 | ||
Разыменовывай указатель, применяй оператор [].
http://liveworkspace.org/code/c0505bbe5ee1b530f603ad25e58c8ab4 ЗЫ. В примере для простоты отсутствуют проверки, управление памятью и тд. |