Operator[]

Signaler
Messages postés
3
Date d'inscription
mercredi 15 août 2007
Statut
Membre
Dernière intervention
5 mai 2010
-
Messages postés
793
Date d'inscription
mardi 8 juillet 2003
Statut
Membre
Dernière intervention
10 février 2021
-
Salut,
je créer une classe matrice en ce moment avec comme data member un double**. Je n'arrive pas a faire l'opérateur d'acces à ma matrice

class matrice{
 	double ** data;

matrice(){
..
}
T& operator[](const int& index){
return this->data[index];
}
T operator[](const int& index)const{
return this->data[index];
}

};


J'ai cette erreur à chaque fois :
error C2109: un indice requiert un type tableau ou pointeur

5 réponses

Messages postés
1115
Date d'inscription
mercredi 15 juin 2011
Statut
Membre
Dernière intervention
6 mai 2021
4
salut,

je connais mal ce genre de chose mais c'est que T ?
Messages postés
3
Date d'inscription
mercredi 15 août 2007
Statut
Membre
Dernière intervention
5 mai 2010

j'ai expliqué un peu vite en oubliant des bouts, la classe est templaté.
template<class T> class matrice{
 	T ** data;

matrice(){
..
}
T& operator[](const int& index){
return this->data[index];
}
T operator[](const int& index)const{
return this->data[index];
}

};
Messages postés
3833
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
11 juin 2021
122
Ceci fonctionne chez moi (compile mais plante, ce qui est normal, c'est juste un exemple):
#include 

template<class T>
class Matrice
{
public:
  Matrice()
  {
  }
  T& operator[](int index)
  {
    return this->data[index];
  }
  T operator[](int index) const
  {
    return this->data[index];
  }
private:
  T* data;
};

int main()
{
  Matrice<double> m;

  std::cout << m[0] << std::endl;

  return 0;
}


A noter que si tu veux faire un truc propre, oublie T*, préfère un std::vector.
De plus, plutôt que de redéfinir "operator[]", redéfinit "operator()". En effet, dans un "operator[]" tu ne peux pas mettre plus d'un argument.

_____________________________________________
Historique de mes créations, et quelques articles:[ http://0217021.free.fr/portfolio
http://0217021.free.fr/portfolio]
Messages postés
3
Date d'inscription
mercredi 15 août 2007
Statut
Membre
Dernière intervention
5 mai 2010

ok merci
néanmoins je trouve ça dommage de ne pas avoir cette opérateur qui est vraiment plus explicite.
Messages postés
793
Date d'inscription
mardi 8 juillet 2003
Statut
Membre
Dernière intervention
10 février 2021
8
Bonjour,
Le fait que tu utilises T** me fait dire que tu dois passer 2 indices (ligne et colonne).
Sinon tu déclares juste T*.


louis