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.
A la compilation :
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; }
Mon compilateur (sous MAC) :
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.
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 :
Merci de votre aide.
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; };
Partager