Bonjour à tous.

Je bloque sur qqch qui paraît simplissime, mais je n'arrive pas à trouver la source du problème.
J'essaie tout simplement de surcharger un opérateur + pour un type que j'ai définit.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include <cassert>
#include <math.h>
 
typedef unsigned char PixelNB;
typedef double PixelFloat;
 
inline PixelNB operator*(const PixelNB& pix, double a){
		assert(a>=0);
		int gris=std::min( static_cast< int >(round(a*pix)) , 255 );
		PixelNB pix_res=gris;
		return pix_res;
};
 
int main( int argc, char* argv[] ){
		PixelNB pixNB=77;
		std::cout << "Hello World !" << std::endl;
}
A la compilation :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
main.cc:10:16: error: overloaded 'operator*' must have at least one parameter of class or enumeration type
inline PixelNB operator*(const PixelNB& pix, double a){
               ^
1 error generated.
Mon compilateur (sous MAC) :
Apple LLVM version 5.1 (clang-503.0.40) (based on LLVM 3.4svn)
Target: x86_64-apple-darwin12.6.0


Le but pour la suite serait de définir cet opérateur pour d'autre type de pixel et de pouvoir ajouter ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
inline PixelFloat operator*(const PixelFloat& pix, double a){
		return a*pix;
};
 
template <typename PixelType>
inline PixelType operator*(double a, const PixelType& pix){ return pix*a; };
Merci de votre aide.