J'ai actuellement quelques difficultés à surcharger les crochets dans une classe de vecteurs personnalisés.Surcharges entre crochets => aucun opérateur ne correspond à des opérandes
Ma classe ressemble fondamentalement ceci:
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;
}
Et dans ce fonctions de classes, je peux appeler (* cela) [0] et tout fonctionne. Maintenant, la question que je vais avoir est avec une classe qui a un membre comme suit:
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;
}
Le problème étant que mon compilateur renvoie une erreur à mon visage en disant
aucun opérateur « [] "correspond à ces opérandes
types d'opérandes sont: const JFFVector [U32]
typedef uint32_t U32.
donc une chose que je remarque est que si je fais m_tItems un pointeur, alors je peux faire "(* m_tItems) [i] -> DoStuff()" et il fonctionne très bien. Mais je ne comprends pas pourquoi cela fonctionne avec une version sans pointeur. (En outre, j'ai essayé avec un simple int au lieu de u32, et, sans surprise, cela n'a pas fonctionné)
Est-ce que quelqu'un a une idée de ce que j'ai mal fait s'il vous plaît? Et, si ce n'est pas trivial, pourquoi est-ce faux?
(Désolé si cela a été déjà répondu, j'ai essayé la recherche d'un problème similaire, mais n'a rien trouvé qui ressemble à cette question)
droit. Dayum. En fait, je suis tombé pour cette erreur. Merci mon pote! – Thex