Bonjour,
Voila j'utilise une librairie de traitement d'images (GD), cette librairie écrit en C
peut s'intégrer dans un environnement Mingw ainsi que DevC++, jusque là j'ai bien su intégrer dans DevC++ avec Vista et tester les fonctions seules de la librairie sans problème de compilation. Mais J'ai dans mon projet plusieurs classes afin de mettre en oeuvre un vrai projet POO avec de l'héritage, de la généricité, des surcharges de méthodes etc....
Mes classes :
Conceptuellement, Pixel doit heriter de la classe Couleur,
la classe Image devra hériter de la classe Image2D et de la classe générique Matrice (dont le paramètre de généricité sera la classe Pixel). La classe Image2D devra contenir les données et les méthodes qui ne concernent que les images en 2D. Idem pour les classes Matrice ou Pixel.
Pour le moment j'ai simplifier en ne mettant pas la classe Image2D ( d'ailleurs on peut s'en passer)
Maintenant que j'ai commencé à intégrer plusieurs classes (fichiers .h et .cpp) j'ai ces erreurs de 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
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38 Compiler: Default compiler Building Makefile: "C:\mygd\gdtestpng\Makefile.win" Executing make... make.exe -f "C:\mygd\gdtestpng\Makefile.win" all g++.exe -c main.cpp -o main.o -I"C:/Dev-Cpp/lib/gcc/mingw32/3.4.2/include" -I"C:/Dev-Cpp/include/c++/3.4.2/backward" -I"C:/Dev-Cpp/include/c++/3.4.2/mingw32" -I"C:/Dev-Cpp/include/c++/3.4.2" -I"C:/Dev-Cpp/include" -I"C:/mygd/gd-latest-win32/include" -I"C:/mygd/gd_build_win32_deps/gd_deps/include" In file included from image.h:5, from main.cpp:13: pixel.h:18: error: expected unqualified-id before "unsigned" pixel.h:18: error: expected `)' before "unsigned" pixel.h:25: error: abstract declarator `<anonymous class>' used as declaration pixel.h:25: error: namespace-scope anonymous aggregates must be static In file included from image.h:6, from main.cpp:13: matrice.h:9: error: template class without a name matrice.h:22: error: expected unqualified-id before "int" matrice.h:22: error: expected `)' before "int" matrice.h:33: error: expected class-name before '(' token matrice.h:56: error: abstract declarator `<anonymous class><T>' used as declaration matrice.h:56: error: namespace-scope anonymous aggregates must be static In file included from main.cpp:13: image.h:15: error: expected unqualified-id before '<' token image.h: In constructor `Image::Image(int, int)': image.h:22: error: class `Image' does not have any field named `matrice_pixel' image.h:22: error: expected `(' at end of input image.h:22: error: expected `{' at end of input main.cpp: In function `int main()': main.cpp:69: error: 'class Image' has no member named 'exportimg' make.exe: *** [main.o] Error 1 Execution terminated
Je pense que c'est moi qui intègre mal mais classes est-ce le cas ?
Voici mon code :
--main.cpp--
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
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83 #include <iostream> #include <windows.h> #include <cstdlib> #include <fstream> #include <stdio.h> #include <stdlib.h> //#include "gd.h" //#include "Pixel.h" //#include "Matrice.h" //Première ligne de bug 13 In file included from image.h:5, from main.cpp #include "image.h" using namespace std; int main() { //ICI il faut instancier objet de la classe Image car c'est la classe fille Image monimg(512,512); Image *monimglist = new Image(512,512); // ICI appeler methode de la classe Image (qui elle appelera methodes Matrice // Pixel, //ICI code de la biblitheque GD // Declarations gdImagePtr im; gdImagePtr imout; FILE *jpegout; int x,y,c=0; int black,r=0,v=0,b=0; char n; // Initialisations im = gdImageCreateTrueColor(512, 512); imout = gdImageCreateTrueColor(512, 512); // fond de l'image mis a noir black = gdImageColorAllocate(im, 0, 0, 0); for (x=0;x<gdImageSX(im);x++) for (y=0;y<gdImageSY(im);y++) { // Genere trois nombres r,v,b entre 0 et 256 r=(int) (256.0*rand()/(RAND_MAX+1.0)); v=(int) (256.0*rand()/(RAND_MAX+1.0)); b=(int) (256.0*rand()/(RAND_MAX+1.0)); // avec ces trois nombres, on "genere" une couleur c= gdImageColorAllocate(im, r, v, b); /* NB : Ces 3 lignes pourraient etre condensees en une seule car on travaille en "couleur vraie" : c=(int) (16777216.0*rand()/(RAND_MAX+1.0)); "c" est bel et bien un entier entre 0 et 256^3, rien de plus ! Le gdImageColorAllocate est superflu ! Pour s'en persuader, printf("R:%d-V:%d-B:%d=>C:%d\n",r,v,b,c); */ // met le pixel en (x,y) a cette couleur gdImageSetPixel(im, x, y, c); } // Ecriture de l'image et nettoyage jpegout = fopen("toto.jpg", "wb"); gdImageJpeg(im, jpegout, -1); // monimg =im; monimg.exportimg(imout); FILE * sortie; sortie= fopen("recup.jpg", "wb"); //(gdImagePtr im, FILE * out, int quality); gdImageJpeg(imout,sortie,10); fclose(sortie); fclose(jpegout); gdImageDestroy(im); gdImageDestroy(imout); system("pause") ; return 0; }
--image.h--
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
19
20
21
22
23
24
25
26
27 //- la classe image qui est définie par la classe générique matrice avec paramètre d'instanciation la classe pixel //#ifndef Image //#define Image #include "pixel.h" #include "matrice.h" #include "gd.h" //typedef Matrice<Pixel> t_Cpixelmat; //template <class T> class Image //: public Matrice <T> { private: Matrice<Pixel> matrice_pixel; public: //Image(const Image&); //~Image(){ } // dois je detruire matrice_pixel ? ==> non, c'est fait dans la classe mère //Image(int n, int m) : t_Cpixelmat(n,m) ; Image(int n, int m) : matrice_pixel ; }; //#endif
--fichier image.cpp--
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
19
20
21 #include "image.h" #include "gd.h" //#include "Pixel.h" //#include "Matrice.h" Image::Image(int n, int m) : matrice_pixel (n,m) { Pixel p; matrice_pixel M; for(int i=0; i<n;i++) (for(int j=0; j<n;j++) M(i,j,p=Pixel(0,0,0,0,i,j); } Image::~Image() { } };
--Pixel.h--
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
19
20
21
22
23
24
25
26
27
28
29 //- la classe pixel qui derive de la classe couleur #ifndef Pixel #define Pixel #include "couleur.h" class Pixel : public Couleur { //private: protected: unsigned int X; //abscisse unsigned int Y; //coordonnée public: //Pixel() : Couleur(0,0,0,0) { X = Y = 0; } //seconde ligne de bug : pixel.h expected unqualified-id before "unsigned" Pixel(unsigned int x, unsigned int y, unsigned char r, unsigned char g, unsigned char b, unsigned char a /*= 0*/) : Couleur(r,g,b,a) { X = x; Y = y; } }; #endif
--Matrice.h--
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
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44 #ifndef Matrice #define Matrice //#include "Pixel.h" template <class T> class Matrice { protected: T **mat; int max_de_lignes; int max_de_colonnes; int nombre_de_lignes; int nombre_de_colonnes; public: //voir Matrice(int n,int m) { max_de_lignes=n, max_de_colonnes=m; nombre_de_lignes=0; nombre_de_colonnes=0; mat=new T*[max_de_lignes]; for(int i=0;i<max_de_lignes;i++) mat[i] = new T[max_de_colonnes]; } ~Matrice() { for(int i=0;i<max_de_lignes;i++) { delete[] mat[i]; } delete[] mat; } }; #endif
--couleur.h--
Enfin j'ai pas fait de fichiers séparé pour l'implémentatoin de toutes mes classes est ce vraiment utile ? Pourriez vous m'aider dans la conception et code de ce projet car je n'arrive pas du tout à éliminer ces erreurs de compilations ?
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
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38 #ifndef _COULEUR #define _COULEUR class Couleur { protected: unsigned char R, G, B; //(ou l'inverse ... à voir plus tard); //unsigned char V[4]; //unsigned long Col; public: void set( unsigned char Rp,unsigned char Gp,unsigned char Bp) { R = Rp; G =Gp; B= Bp; } unsigned char get_R() { return R; } unsigned char get_G() { return G; } unsigned char get_B() { return B; } unsigned int get_color() //32 bits { return ( (unsigned long)R << 16 | (unsigned long)G << 8 | (unsigned long)B); } Couleur() { R = G = B = 0; } Couleur(unsigned char r, unsigned char g, unsigned char b, unsigned char a = 0) { set(r, g, b);} }; #endif
Merci
Partager