Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1053 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Surcharge d'operateur []

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Surcharge d'operateur []

n°1970525
Lan Wezel
Posté le 02-03-2010 à 12:32:09  profilanswer
 

Bon, je me sens un peu bête en posant cette question mais bon.
Je vous la fais avec un grand classique du C++.
 

Code :
  1. template<class T>
  2. class Matrix : protected std::vector<T>{
  3. public:
  4.   uint m_nbRow;
  5.   uint m_nbCol;
  6.   Matrix(uint nbRow, uint nbCol, const T& value= T()):std::vector<T>(nbCol*nbRow, value), m_nbCol(nbCol),m_nbRow(nbRow){}
  7.   const T& operator () (uint row, uint column) const{
  8.     return std::vector<T>::operator[](column + (row * m_nbCol));
  9.   }
  10.   T& operator () (uint row, uint column) {
  11.     return std::vector<T>::operator[](column + (row * m_nbCol));
  12.   }
  13. };


 
Mon compilo me renvoi un WARNING  disant que je retourne une référence sur un objet temporaire : "attention : retourné la référence vers le temporaire" (Eh oui j'ai G++ en FR au boulot :D ).
Pourtant l'operateur [] des std::vector retourne bien une (const ou pas) ref.
De plus, j'ai fais quelques UT et la classe semble se comporter correctement, notamment au niveau de l'affectation d'une case.
 

Code :
  1. Matrix<uint> m = Matrix<uint>(2,3,0);
  2. m(1,0) = 3;


 
Crée bien:
0 0 0
3 0 0
 
Ma question est : je comprends pas pourquoi il me fait ce warning et dois-je m'en inquiéter ?

mood
Publicité
Posté le 02-03-2010 à 12:32:09  profilanswer
 

n°1970530
Un Program​meur
Posté le 02-03-2010 à 12:42:40  profilanswer
 

Exemple minimum complet si possible.  En completant moi-meme je n'ai pas ce warning avec les deux versions de g++ que j'ai essaiees.


---------------
The truth is rarely pure and never simple (Oscar Wilde)
n°1970549
Lan Wezel
Posté le 02-03-2010 à 14:11:59  profilanswer
 

Eh m****, tu m'auras fais comprendre où était mon erreur.
Elle n'était pas là.
Je m'escuse pour cette question finalement inutile.

 

En fait ce warning vient d'un cast lors d'une retour de fonction appelant l'operateur de Matrix.

Code :
  1. bool&
  2. anotherClass::operator () (i,j){
  3.   return m_matrice(i,j);
  4. }
 

Merci en tout cas pour ta rapidité.
Si un modo veut supprimer le topic, il ne faut pas hésiter.

 

edit: je suis un boulet :D


Message édité par Lan Wezel le 02-03-2010 à 14:13:10

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Surcharge d'operateur []

 

Sujets relatifs
Mauvais choix de méthode lors de surcharge d'opérateurProbleme de surcharge operateur <<
Surcharge d'opérateurSurcharge d'opérateur ==
problème surcharge opérateursurcharge de l'opérateur [][]
surcharge operateur <Probleme de surcharge d'opérateur et de fonction amies
surcharge de l'opérateur =Surcharge de l'opérateur = + Appel non souhaité à delete
Plus de sujets relatifs à : Surcharge d'operateur []


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR