Surcharge d'operateur []

Surcharge d'operateur [] - C++ - Programmation

Marsh Posté le 02-03-2010 à 12:32:09    

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 ?

Reply

Marsh Posté le 02-03-2010 à 12:32:09   

Reply

Marsh Posté le 02-03-2010 à 12:42:40    

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)
Reply

Marsh Posté le 02-03-2010 à 14:11:59    

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
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed