В настоящее время у меня возникают проблемы с перегрузкой квадратных скобок в пользовательском векторном классе.
Мой класс в основном выглядит так:
typedef uint32_t u32; // This is not actually here, but so you get the idea. Also, it is included in the problematic call's file
template<class T>
class JFFVector
{
public:
//Init and stuff
T& operator[](u32 iIndex)
{
return m_pData[iIndex + miDataOffset];
}
private:
T* m_pData;
u32 m_iDataOffset;
}
И внутри этих функций классов я могу вызвать (*this)[0] и все работает. Теперь проблема, с которой я сталкиваюсь, связана с классом, в котором есть член следующим образом:
class TOtherClass
{
public:
// Stuff
void DoSomething() const
{
for (u32 i; i < m_tItems.size(); ++i)
m_tItems[i]->DoStuff(); // Which is a const function
}
private:
JFFVector<const JFFItem*> m_tItems;
}
Проблема в том, что мой компилятор выдает ошибку на моем лице, говоря
ни один оператор "[]" не соответствует этим операндам
типы операндов: const JFFVector[u32]
typedef uint32_t u32.
Итак, одна вещь, которую я заметил, это то, что если я делаю m_tItems указателем, то я могу сделать "(*m_tItems)[i]->DoStuff()", и это работает нормально. Но я не понимаю, почему это работает, а не с версией без указателя. (Кроме того, я попробовал использовать простой int вместо u32, и, что неудивительно, это не сработало)
Кто-нибудь знает, что я сделал неправильно, пожалуйста? И, если не тривиально, то почему неправильно?
(Извините, если на этот вопрос уже был дан ответ, я пытался найти похожую проблему, но не нашел ничего похожего на эту проблему)