Bonjour,
Je suis complètement à bout... je ne sais pas programmer et je ne le saurai jamais. Le problème c'est que je dois programmer........ J'ai envie de tout laisser tomber mais bon... je ne peux pas, je suis une esclave...
Long résumé (désolée, je sais pas faire court) :
Je reprend mon programme depuis le début pour le rendre clair et propre.
Jusque là, une structure, un tableau dynamique du type de ma structure, trois fonctions (une qui ouvre un fichier, compte le nombre de lignes et referme le fichier; une qui ouvre un fichier lis les données et les écrit dans mon tableau de structure; et une qui fait une transformée de fourier à partir de mes données) et c'est tout. Rien de bien méchant. Ca compile très bien, ça me donne ce que je veux. Parfait quoi...
Je passe à l'étape suivante : structuration de mon programme en créant des modules contenant mes fonctions. J'ai donc (pour l'instant) un fichier init.cpp avec son init.h et mon fichier principal. J'écris mon Makefile en faisant un copier coller de ce qui fonctionnait déjà avant et en remplaçant les noms des fichiers par les bons.
J'ai donc trois fichiers :
init.h :
Ceci dit, en passant, je ne sais même pas à quoi ça sert le #ifndef INIT_H et tout le tralala avec les #.... J'ai trouvé ça un peu partout quand j'ai cherché et donc je l'ai mis ya une heure pour voir si ça améliorait mon problème. (ça change rien...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 1 #ifndef INIT_H 2 #define INIT_H 3 4 5 int lignes_fichier(string nom_fichier); 6 int lecture_donnees(string nom_fichier, donnees *serie_temp); #endif)
init.cpp :
Et mon main.cpp (en réalité il s'appelle fond031007.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 #include <string> #include <iostream> #include <fstream> #include "init.h" using namespace std; 8 9 // Determine le nombre de lignes d'un fichier 10 11 int lignes_fichier(string nom_fichier) { // Je ne pense pas que ce soit la peine que je mette tout le détail // ouverture de mon fichier // comptage du nombre de lignes // fermeture de mon fichier } 33 34 // Lis les donnees dans un fichier et les ecrit dans un tableau de structure 35 36 int lecture_donnees(string nom_fichier, donnees *serie_temp) //&serie_temp { // Je ne pense pas que ce soit la peine que je mette tout le détail // Ouverture de mon fichier appelé nom_fichier // Je parcours mon fichier et je remplis serie_temp // Je ferme mon fichier }
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 #include <iostream.h> #include <fstream.h> #include <math.h> #include <complex.h> #include <fftw3.h> #include <string> #include "init.h" #include "gsl_multimin.h" using namespace std; struct donnees { double temps; double sig; }; // je n'ai pas encore déplacé cette fonction... je suis tellement nulle que j'ai réussi à bloquer avant.. int TF(fftw_complex *Ttfdata, fftw_plan p, const long npts, const long Nout, donnees *serie_temp, string fichier_sortie, donnees *tfdata); int main() { string nom_fichier; cout<<"nom du fichier : "<<endl; cin>>nom_fichier; // nombre de lignes de mon fichier const long npts = lignes_fichier(nom_fichier); struct donnees *serie_temp = new donnees[npts]; // lecture et ecriture de mon fichier lecture_donnees(nom_fichier,serie_temp); /* TRANSFORMEE DE FOURIER RAPIDE FFTW */ // déclaration de tous les trucs que la TF a besoin const long Nout = long( npts / 2) + 1; donnees *tfdata = new donnees[Nout]; fftw_complex *Ttfdata; fftw_plan p; string fichier_TF; cout<<"nom du fichier de sortie pour la TF des donnees: "<<endl; cin>>fichier_TF; // Et la TF... TF(Ttfdata, p, npts, Nout, serie_temp, fichier_TF, tfdata); delete [] serie_temp; delete [] tfdata; return 0; } int TF(fftw_complex *Ttfdata, fftw_plan p, const long npts, const long Nout, donnees *serie_temp, string fichier_sortie, donnees *tfdata) { // Je vous fais grace des détails }
Pour finir mon Makefile :
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 CPP = /usr/bin/g++ OBJ= fond031007.o CFLAGS = -O2 -Wno-deprecated -I/usr/local/include/gsl -lm -lgsl -lgslcblas -lfftw3 all: fondOK fondOK: init.o fond031007.o $(CPP) $(CFLAGS) init.o fond031007.o -o fondOK fond031007.o: fond031007.cpp /usr/local/include/gsl/gsl_multimin.h $(CPP) $(CFLAGS) -c fond031007.cpp init.o: init.cpp init.h $(CPP) $(CFLAGS) -c init.cpp
Et maintenant mon problème...
désolée si les lignes ne correspondent pas... J'ai mis des numéros aux bons endroits.init.h:5: error: ‘string’ was not declared in this scope
init.h:6: error: ‘string’ was not declared in this scope
init.h:6: error: ‘donnees’ was not declared in this scope
init.h:6: error: ‘serie_temp’ was not declared in this scope
init.h:6: error: initializer expression list treated as compound expression
init.cpp: In function ‘int lignes_fichier(std::string)’:
init.cpp:11: error: ‘int lignes_fichier(std::string)’ redeclared as different kind of symbol
init.h:5: error: previous declaration of ‘int lignes_fichier’
init.cpp: At global scope:
init.cpp:36: error: ‘donnees’ has not been declared
init.cpp: In function ‘int lecture_donnees(std::string, int*)’:
init.cpp:36: error: ‘int lecture_donnees(std::string, int*)’ redeclared as different kind of symbol
init.h:6: error: previous declaration of ‘int lecture_donnees’
init.cpp:51: error: request for member ‘temps’ in ‘*(((int*)(((unsigned int)cpt) * 4u)) + serie_temp)’, which is of non-class type ‘int’
init.cpp:52: error: request for member ‘sig’ in ‘*(((int*)(((unsigned int)cpt) * 4u)) + serie_temp)’, which is of non-class type ‘int’
make: *** [init.o] Error 1
L'erreur sur les lignes 51 et 52 sont dues au fait que ma structure ne doit pas être au bon endroit que qu'elle n'est pas vue par init.cpp
Avez-vous une idée de pourquoi il me dit que "string" n'a pas été déclaré ? Je n'y comprends plus rien, je suis à bout de nerf....![]()
![]()
![]()
![]()
![]()
![]()
... Je vous retrouve demain, je ne suis plus du tout efficace ce soir ( et j'ai pas internet chez moi... pour une fois, je suis contente car sinon je n'aurai pas pu m'empêcher de gâcher ma soirée à desespérer pour trouver une solution)
Partager