Je fais pas souvent de surcharge, alors je me reference aux tutoriaux... et j'écris

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
 
class Tensor
{
  ...
  friend Tensor operator*(const double d, const Tensor & T);
  ...
};
que je définie dans le .cpp
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
 
Tensor operator*(const double d, const Tensor & T)
{
  return( Tensor( T._mat3x3 * d ) );
}
Mais le compilo est pas content:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 
no match for 'operator*' in '(+(&tFieldSp)->std::vector<_Tp, _Alloc>::operator[] [with _Tp = std::vector<Tensor, std::allocator<Tensor> >, _Alloc = std::allocator<std::vector<Tensor, std::allocator<Tensor> > >](((unsigned int)i)))->std::vector<_Tp, _Alloc>::operator[] [with _Tp = Tensor, _Alloc = std::allocator<Tensor>](((unsigned int)j)) * 3.2'
Tensor.h:26: note: candidates are: Tensor operator*(double, const Tensor&)
a l'ecriture de
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
tFieldSp[i][j] * 3.2;
ou tField est juste un vector de Tensor (éprouvé et rééprouvé, à ne pas mettre en cause). Forcément si j'inverse et que je met 3.2 de l'autre cote ca marche... mais cela veut il dire que la surcharge d'operateur symetrique est synonyme de surchage de fonction en inversant les parametre (c'est pas cool)?