Précédent   Forum du club des développeurs et IT Pro > C et C++ > C++ > Débuter
Débuter Forum d'entraide pour débuter en langage de programmation C++. Avant de poster : cours d'initiation au C++
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 21/02/2013, 00h52   #1
svagrim
Membre du Club
 
Inscription : juin 2007
Messages : 204
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 204
Points : 62
Points : 62
Par défaut boost création multiarray classe

Bonjour,

j'ai un problème lorsque j'essaye de générer une multiarray membre d'une classe et de l'utiliser par la suite.

dans le .h j'ai mis ça :
Code :
1
2
3
4
private:  
   typedef boost::multi_array<float, 5> array_type;
   array_type::extent_gen extents;
   array_type data(boost::extents[1][1][1][1][1]);
je veux juste l'initialiser.

et dans le .cpp associé à la classe.
je veux resize la matrice data.
Code :
data.resize([2][2][2][2][2]);
(les 2 c'est juste pour l'essai. normalement c'est des size_x,size_y, etc ...)

si je fais ça j'ai les erreur suivantes:

Citation:
test_class.h:75: error: expected `;' before '(' token

test_class.cpp: In member function `void Images::reading(std::string, std::vector<std::string, std::allocator<std::string> >&)':
test_class.cpp:479: error: `data' undeclared (first use this function)
test_class.cpp:479: error: (Each undeclared identifier is reported only once for each function it appears in.)

test_class.cpp:479: error: expected primary-expression before '[' token
si je commente la ligne dans le point cpp j'ai plus que l'erreur suivante:
Citation:
In file included from test_class.cpp:19:
test_class.h:75: error: expected `;' before '(' token
quelqu'un vois le problème ?
svagrim est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/02/2013, 09h24   #2
Bousk
Modérateur
 
Homme Cyrille
Network programmer
Inscription : juin 2010
Messages : 1 553
Détails du profil
Informations personnelles :
Nom : Homme Cyrille
Âge : 25
Localisation : France

Informations professionnelles :
Activité : Network programmer

Informations forums :
Inscription : juin 2010
Messages : 1 553
Points : 4 109
Points : 4 109
Bonjour,

quelle est la ligne 75 du .h ? L'erreur vient clairement de là.

Ensuite, sur la doc de boost, l'exemple n'est pas identique au tien:
Code :
1
2
3
typedef boost::multi_array<double, 3> array_type;
  typedef array_type::index index;
  array_type A(boost::extents[3][4][2]);
Bousk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/02/2013, 20h28   #3
svagrim
Membre du Club
 
Inscription : juin 2007
Messages : 204
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 204
Points : 62
Points : 62
arf oui désolé.

la ligne 75 de mon .h ça correspond à la ligne 4 dans l'extrait que j'ai mis.
la ligne :
Code :
 array_type data(boost::extents[1][1][1][1][1]);
et j'ai pris cet exemple dans la doc de boost:
Citation:
typedef boost::multi_array<double, 3> array_type;

array_type::extent_gen extents;
array_type A(extents[2][3][4]);
j'avais essayé aussi l'exemple que tu cites. mais sans succès non plus.
svagrim est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/02/2013, 11h52   #4
eti_nne
Membre à l'essai
 
Homme
Ingénieur développement logiciels
Inscription : février 2013
Messages : 23
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Ingénieur développement logiciels

Informations forums :
Inscription : février 2013
Messages : 23
Points : 22
Points : 22
Citation:
Envoyé par svagrim Voir le message
Code :
1
2
3
4
private:  
   typedef boost::multi_array<float, 5> array_type;
   array_type::extent_gen extents;
   array_type data(boost::extents[1][1][1][1][1]);
Salut,

A mon humble avis, tu ferais bien de retirer le namespace boost:: de boost::extents.
Tu définis une variable extents la ligne juste au dessus (array_type::extent_gen extents;).
Par contre, tu ne l'utilises pas. Mais tu vas chercher un symbol extents dans le namespace boost, qui ne correspond pas à ce que tu veux.

Peut-être que ce n'est pas ton erreur. En tout cas, c'est louche
eti_nne est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/02/2013, 19h34   #5
svagrim
Membre du Club
 
Inscription : juin 2007
Messages : 204
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 204
Points : 62
Points : 62
nan ça ne change rien.
par contre oui je suis d'accord avec ton argument.
je sais pas pourquoi dans la doc de boost il remette boost::...

mais bon c'est pas ça l'erreur. toujours le meme probleme de compilation sans ça.
svagrim est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/02/2013, 19h08   #6
svagrim
Membre du Club
 
Inscription : juin 2007
Messages : 204
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 204
Points : 62
Points : 62
arf je m'en sors toujours pas ...
j'ai beau parcourir l'aide de boost je vois pas.
personne n'a d'idée du problème ?
svagrim est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/02/2013, 11h38   #7
leternel
Expert Confirmé
 
Homme Pierre
Ingénieur développement logiciels
Inscription : juin 2007
Messages : 1 220
Détails du profil
Informations personnelles :
Nom : Homme Pierre
Localisation : France

Informations professionnelles :
Activité : Ingénieur développement logiciels

Informations forums :
Inscription : juin 2007
Messages : 1 220
Points : 2 596
Points : 2 596
Montre-nous les 80 premières lignes de ton .h, que l'on voit ce qui peut se passer.
__________________
Mes principes de bases du codeur qui veut pouvoir dormir:
  • Une variable de moins est une source d'erreur en moins.
  • Un pointeur de moins est une montagne d'erreurs en moins.
  • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
  • La plus sotte des questions est celle qu'on ne pose pas.
leternel est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/03/2013, 22h31   #8
svagrim
Membre du Club
 
Inscription : juin 2007
Messages : 204
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 204
Points : 62
Points : 62
voici la totalité du .h :
Code :
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
#ifndef TEST_CLASS_H
#define TEST_CLASS_H
 
#include <vector>
#include <string>
#include <boost/multi_array.hpp>
 
#define WANT_TRACE 1
 
/*reading the vff files, header and images, and sort them in the variable ... */
 
class Images
{   
public:
 
   Images();
   void reading(std::string input, std::vector<std::string> &files);
 
private:   
   std::vector<std::string> ttype; 
   std::vector<std::vector<int> > tsize; 
   std::vector<int> tbits;
   std::vector<std::string> trank;
   std::vector<std::string> tbands;
   std::vector<int> ty_bin;
   std::vector<int> tz_bin;
   std::vector<float> trfan_y;
   std::vector<float> trfan_z;
   std::vector<float> tmin;
   std::vector<float> tmax;
   std::vector<float> twater;
   std::vector<float> tair;
   std::vector<float> tbonehu;
   std::vector<float> tangle_increment;
   std::vector<float> tcenter_of_rotation;
   std::vector<float> tcentral_slice;
   std::vector<std::vector<float> > tspacing;
   std::vector<std::vector<float> > torigin;
   std::vector<std::string> tformat;
   std::vector<float> telementsize;
   std::vector<std::string> tmodality;
   std::vector<std::string> tdate;
   std::vector<std::string> ttitle;
   std::vector<std::string> tsubject;
   std::vector<std::string> treverse_order;
   std::vector<std::string> trecon_sysid;
   std::vector<std::string> tmacaddr;
   std::vector<int> trawsize;
   std::vector<float> tcurrent;
   std::vector<std::string> tcurrentUnit;
   std::vector<std::string> tdataSourceJID;
   std::vector<std::string> texam;
   std::vector<float> texposure;
   std::vector<float> tframesAverage;
   std::vector<float> tgain;
   std::vector<float> tgantryPosition;
   std::vector<float> tincrementAngle;
   std::vector<float> toffset;
   std::vector<std::string> tproject;
   std::vector<std::string> tprotocol;
   std::vector<std::string> tscanTechnique;
   std::vector<std::string> tscanType;
   std::vector<std::string> tsequence;
   std::vector<std::string> tserialNumber;
   std::vector<std::string> tseries;
   std::vector<std::string> tseriesVersion;
   std::vector<float> ttablePosition; 
   std::vector<float> tvoltage;
   std::vector<std::string> tvoltageUnit;
   std::vector<std::string> tspacingUnit;       
 
   // Create a 3D array that is 1 x 1 x 1 x 1 x 1 to start
   typedef boost::multi_array<float, 5> array_type;
   array_type::extent_gen extents;
   array_type data(extents[1][1][1][1][1]);
//   array_type A(boost::extents[3][4][2][4][4]);
 
};
 
#endif // TEST_CLASS_H
y a pas grand chose dedans.
svagrim est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/03/2013, 01h19   #9
svagrim
Membre du Club
 
Inscription : juin 2007
Messages : 204
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 204
Points : 62
Points : 62
voici la totalité du .h :
Code :
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
#ifndef TEST_CLASS_H
#define TEST_CLASS_H
 
#include <vector>
#include <string>
#include <boost/multi_array.hpp>
 
#define WANT_TRACE 1
 
/*reading the vff files, header and images, and sort them in the variable ... */
 
class Images
{   
public:
 
   Images();
   void reading(std::string input, std::vector<std::string> &files);
 
private:   
   std::vector<std::string> ttype; 
   std::vector<std::vector<int> > tsize; 
   std::vector<int> tbits;
   std::vector<std::string> trank;
   std::vector<std::string> tbands;
   std::vector<int> ty_bin;
   std::vector<int> tz_bin;
   std::vector<float> trfan_y;
   std::vector<float> trfan_z;
   std::vector<float> tmin;
   std::vector<float> tmax;
   std::vector<float> twater;
   std::vector<float> tair;
   std::vector<float> tbonehu;
   std::vector<float> tangle_increment;
   std::vector<float> tcenter_of_rotation;
   std::vector<float> tcentral_slice;
   std::vector<std::vector<float> > tspacing;
   std::vector<std::vector<float> > torigin;
   std::vector<std::string> tformat;
   std::vector<float> telementsize;
   std::vector<std::string> tmodality;
   std::vector<std::string> tdate;
   std::vector<std::string> ttitle;
   std::vector<std::string> tsubject;
   std::vector<std::string> treverse_order;
   std::vector<std::string> trecon_sysid;
   std::vector<std::string> tmacaddr;
   std::vector<int> trawsize;
   std::vector<float> tcurrent;
   std::vector<std::string> tcurrentUnit;
   std::vector<std::string> tdataSourceJID;
   std::vector<std::string> texam;
   std::vector<float> texposure;
   std::vector<float> tframesAverage;
   std::vector<float> tgain;
   std::vector<float> tgantryPosition;
   std::vector<float> tincrementAngle;
   std::vector<float> toffset;
   std::vector<std::string> tproject;
   std::vector<std::string> tprotocol;
   std::vector<std::string> tscanTechnique;
   std::vector<std::string> tscanType;
   std::vector<std::string> tsequence;
   std::vector<std::string> tserialNumber;
   std::vector<std::string> tseries;
   std::vector<std::string> tseriesVersion;
   std::vector<float> ttablePosition; 
   std::vector<float> tvoltage;
   std::vector<std::string> tvoltageUnit;
   std::vector<std::string> tspacingUnit;       
 
   // Create a 3D array that is 1 x 1 x 1 x 1 x 1 to start
   typedef boost::multi_array<float, 5> array_type;
   array_type::extent_gen extents;
   array_type data(extents[1][1][1][1][1]);
//   array_type A(boost::extents[3][4][2][4][4]);
 
};
 
#endif // TEST_CLASS_H
y a pas grand chose dedans.
svagrim est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/03/2013, 10h47   #10
leternel
Expert Confirmé
 
Homme Pierre
Ingénieur développement logiciels
Inscription : juin 2007
Messages : 1 220
Détails du profil
Informations personnelles :
Nom : Homme Pierre
Localisation : France

Informations professionnelles :
Activité : Ingénieur développement logiciels

Informations forums :
Inscription : juin 2007
Messages : 1 220
Points : 2 596
Points : 2 596
Je pense qu'eti_nne a raison.
Avec typedef boost::multi_array<float, 5> array_type;, array_type est un type.
array_type::extent_gen extents; déclare extents comme une variable du type array_type::extent_gen.

Donc array_type data(extents[1][1][1][1][1]); définit data comme un array_type en appelant un de ses constructeurs avec en argument la valeur de operateur[](operateur[](operateur[](operateur[](operateur[](extents,1),1),1),1),1)Ce qui n'est possible qu'en C++11 (et pas encore avec tous les compilateurs), et n'est pas ce que tu souhaites
__________________
Mes principes de bases du codeur qui veut pouvoir dormir:
  • Une variable de moins est une source d'erreur en moins.
  • Un pointeur de moins est une montagne d'erreurs en moins.
  • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
  • La plus sotte des questions est celle qu'on ne pose pas.
leternel est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/03/2013, 23h51   #11
svagrim
Membre du Club
 
Inscription : juin 2007
Messages : 204
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 204
Points : 62
Points : 62
donc en gros faut que à la place de:
Code :
1
2
3
   typedef boost::multi_array<float, 5> array_type;
   array_type::extent_gen extents;
   array_type data(extents[1][1][1][1][1]);
j'essaye :
Code :
1
2
   typedef boost::multi_array<float, 5> array_type;
   array_type data([1][1][1][1][1]);
c'est ça ?
je suis pas sur d'avoir compris.

je peux pas essayer aujourd'hui mais je pourrais demain.
c'est bien ça qu'il faut que j'essaye ?
svagrim est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/03/2013, 22h04   #12
svagrim
Membre du Club
 
Inscription : juin 2007
Messages : 204
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 204
Points : 62
Points : 62
Bon j'ai essayé de faire ce que j'avais noté, enlever l'extend en faisant :
Code :
1
2
typedef boost::multi_array<float, 5> array_type;
   array_type data([1][1][1][1][1]);
et j'ai toujours la même erreur:
Citation:
75 C:\Users\pierre\Dropbox\micro-ct_files\sinogram\test_class.h expected `;' before '(' token
j'arrive vraiment pas à trouver l'erreur ....
svagrim est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/03/2013, 11h00   #13
leternel
Expert Confirmé
 
Homme Pierre
Ingénieur développement logiciels
Inscription : juin 2007
Messages : 1 220
Détails du profil
Informations personnelles :
Nom : Homme Pierre
Localisation : France

Informations professionnelles :
Activité : Ingénieur développement logiciels

Informations forums :
Inscription : juin 2007
Messages : 1 220
Points : 2 596
Points : 2 596
L'initialisation se fait dans un constructeur, à moins d'être en C++11, et auquel cas, ce n'est pas encore gagné, selon le compilateur.
__________________
Mes principes de bases du codeur qui veut pouvoir dormir:
  • Une variable de moins est une source d'erreur en moins.
  • Un pointeur de moins est une montagne d'erreurs en moins.
  • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
  • La plus sotte des questions est celle qu'on ne pose pas.
leternel est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/03/2013, 19h32   #14
svagrim
Membre du Club
 
Inscription : juin 2007
Messages : 204
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 204
Points : 62
Points : 62
oki, je retourne à mes tutoriels que j'ai un peu oublié sur les constructeurs alors

merci
svagrim est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/03/2013, 01h52   #15
svagrim
Membre du Club
 
Inscription : juin 2007
Messages : 204
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 204
Points : 62
Points : 62
lorsque j'insère l'initialisation dans un constructeur,
le compilage plante en me disant qu'il ne connais pas les variables que j'ai initialisé.

Code :
1
2
3
4
5
6
7
8
9
 
//constructor
Images::Images()
{
// Create a 3D array that is 1 x 1 x 1 to start
typedef boost::multi_array<double, 3> array_type;
typedef array_type::index index;
array_type A(boost::extents[3][875][568]);               
}
Code :
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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
//function reading
void Images::reading(string input, vector<string> &files)
{
 
Images A;
 
#if WANT_TRACE > 0
  cout << "files are: \"" << input << endl;
  for (vector<string>::iterator it = files.begin() ; it != files.end(); ++it)
    cout << *it << endl;
  cout << "\"" << endl;
#endif
 
int mat_i = 0;
 
  for (vector<string>::iterator it = files.begin()+2 ; it != files.end(); ++it) 
  {
 
    /* Read projection file*/
#if defined _WIN32 || defined _WIN64
    string sep = "\\";
#else
    string sep = "/";
#endif
 
    string file_to_open = input+sep+*it;
 
#if WANT_TRACE > 0
    cout << "file is: \"" << file_to_open << "\"" << endl;
#endif
 
    ifstream input_file;
    cout << "test" << endl;
cout << file_to_open << endl;
    input_file.open (file_to_open.c_str(), ifstream::in);
    input_file.seekg(0,ios::beg);
 
    if(input_file == NULL)
    {
      cerr<<"Cannot open input file \n";
      return;
    }
 
    /* Read the header */
    string line;
 
    getline(input_file, line );
 
#if WANT_TRACE > 0	
    cout << "first line :" << endl << line << endl;
#endif
 
    string test ("=");
    size_t found;
	int n;
    int size_j = 0;
	int size_k = 0;
 
    while ( getline(input_file, line ) )
    {
      found = line.find(test);
 
//#if WANT_TRACE > 0	
//      cout << "found :" << int(found) << endl;
//#endif
//	  if (found == string::npos)
//		break;
 
      string name_info;
      string info;
      name_info = line.substr(0,found);
      info = line.substr(found+1,(line.length()-found-2));
      stringstream info2(info); 
      int val; float val2;
 
      //cout << (line.length()-found-2) << endl;
      //cout << name_info << endl;
      //cout << "info :" << info << endl;
 
      if(!strcmp(name_info.c_str(), "type" ))
      {
        ttype.push_back(info.c_str());
      }
      else if(!strcmp(name_info.c_str(), "size" ))
      {
      /*
        //stringstream info2(info); 
        vector<int> vals;
        while(info2.good()) 
        {
          info2 >> val;
          cout << "TAILLE MATRICE" << endl;
          cout << val << endl;
          vals.push_back(val);
          tsize.push_back(vals);
        }
        //delete &vals;
      */
 
        if (info2.good()) {
            info2 >> size_j;
            }
        if (info2.good()) {
            info2 >> size_k;
            }
      }
 
      else if(!strcmp(name_info.c_str(), "bits" ))
      {
        info2 >> val;
        cout << "BITS" << endl;
        cout << val << endl;
        tbits.push_back(val);
      }
 
      else if(!strcmp(name_info.c_str(), "rank" ))
      {
        trank.push_back(info.c_str());
      }
 
      else if(!strcmp(name_info.c_str(), "bands" ))
      {
        tbands.push_back(info.c_str());
      }
 
      else if(!strcmp(name_info.c_str(), "y_bin" ))
      {
        info2 >> val;
        cout << "Y_BIN";
        cout << val << endl;
        ty_bin.push_back(val);
      }
 
      else if(!strcmp(name_info.c_str(), "z_bin" ))
      {
        info2 >> val;
        cout << "Z_BIN";
        cout << val << endl;
        tz_bin.push_back(val);
      }
 
      else if(!strcmp(name_info.c_str(), "rfan_y" ))
      {
        info2 >> val2;
        cout << "RFAN_Y";
        cout << val2 << endl;
        trfan_y.push_back(val2);
      }
 
      else if(!strcmp(name_info.c_str(), "rfan_z" ))
      {
        info2 >> val2;
        cout << "RFAN_Z";
        cout << val2 << endl;
        trfan_z.push_back(val2);
      }
 
      else if(!strcmp(name_info.c_str(), "min" ))
      {
        info2 >> val2;
        cout << "MIN";
        cout << val2 << endl;
        tmin.push_back(val2);
      }
 
      else if(!strcmp(name_info.c_str(), "max" ))
      {
        info2 >> val2;
        cout << "MAX";
        cout << val2 << endl;
        tmax.push_back(val2);
      }
 
      else if(!strcmp(name_info.c_str(), "water" ))
      {
        info2 >> val2;
        cout << "WATER";
        cout << val2 << endl;
        twater.push_back(val2);
      }
 
      else if(!strcmp(name_info.c_str(), "air" ))
      {
        info2 >> val2;
        cout << "AIR";
        cout << val2 << endl;
        tair.push_back(val2);
      }
 
      else if(!strcmp(name_info.c_str(), "bonehu" ))
      {
        info2 >> val2;
        cout << "BONE_HU";
        cout << val2 << endl;
        tbonehu.push_back(val2);
      }
 
      else if(!strcmp(name_info.c_str(), "angle_increment" ))
      {
        info2 >> val2;
        cout << "ANGLE_INCREMENT";
        cout << val2 << endl;
        tangle_increment.push_back(val2);
      }
 
      else if(!strcmp(name_info.c_str(), "center_of_rotation" ))
      {
        info2 >> val2;
        cout << "CENTER_OF_ROTATION";
        cout << val2 << endl;
        tcenter_of_rotation.push_back(val2);
      }
 
      else if(!strcmp(name_info.c_str(), "central_slice" ))
      {
        info2 >> val2;
        cout << "CENTRAL_SLICE";
        cout << val2 << endl;
        tcentral_slice.push_back(val2);
      }
 
      else if(!strcmp(name_info.c_str(), "spacing" ))
      {
        vector<float> vals2;
        while(info2.good()) 
        {
          info2 >> val2;
          cout << "SPACING" << endl;
          cout << val2 << endl;
          vals2.push_back(val2);
          tspacing.push_back(vals2);
        }
        //delete &vals2;
      }
 
      else if(!strcmp(name_info.c_str(), "origin" ))
      {
        vector<float> vals2;
        while(info2.good()) 
        {
           info2 >> val2;
           cout << "SPACING" << endl;
           cout << val2 << endl;
           vals2.push_back(val2);
           torigin.push_back(vals2);
         }
         //delete &vals2;
      }
 
      else if(!strcmp(name_info.c_str(), "format" ))
      {
        tformat.push_back(info.c_str());
      }
 
      else if(!strcmp(name_info.c_str(), "elementsize" ))
      {
        info2 >> val2;
        cout << "ELEMENTSIZE" << endl;
        cout << val2 << endl;
        telementsize.push_back(val2);
      }
 
      else if(!strcmp(name_info.c_str(), "modality" ))
      {
        tmodality.push_back(info.c_str());
      }
 
      else if(!strcmp(name_info.c_str(), "date" ))
      {
        tdate.push_back(info.c_str());
      }
 
      else if(!strcmp(name_info.c_str(), "title" ))
      {
        ttitle.push_back(info.c_str());
      }
 
      else if(!strcmp(name_info.c_str(), "subject" ))
      {
        tsubject.push_back(info.c_str());
      }
 
      else if(!strcmp(name_info.c_str(), "reverse_order" ))
      {
        treverse_order.push_back(info.c_str());
      }
 
      else if(!strcmp(name_info.c_str(), "recon_sysid" ))
      {
        trecon_sysid.push_back(info.c_str());
      }
 
      else if(!strcmp(name_info.c_str(), "macaddr" ))
      {
        tmacaddr.push_back(info.c_str());
      }
 
      else if(!strcmp(name_info.c_str(), "rawsize" ))
      {
        info2 >> val;
        cout << "RAWSIZE";
        cout << val << endl;
        trawsize.push_back(val);
      }
 
      else if(!strcmp(name_info.c_str(), "current" ))
      {
        info2 >> val2;
        cout << "CURRENT" << endl;
        cout << val2 << endl;
        tcurrent.push_back(val2);
      }
 
      else if(!strcmp(name_info.c_str(), "currentUnit" ))
      {
        tcurrentUnit.push_back(info.c_str());
      }
 
      else if(!strcmp(name_info.c_str(), "dataSourceJID" ))
      {
        tdataSourceJID.push_back(info.c_str());
      }
 
      else if(!strcmp(name_info.c_str(), "exam" ))
      {
        texam.push_back(info.c_str());
      }
 
      else if(!strcmp(name_info.c_str(), "exposure" ))
      {
        info2 >> val2;
        cout << "EXPOSURE" << endl;
        cout << val2 << endl;
        texposure.push_back(val2);
      }
 
      else if(!strcmp(name_info.c_str(), "framesAverage" ))
      {
        info2 >> val2;
        cout << "FRAMESAVERAGE" << endl;
        cout << val2 << endl;
        tframesAverage.push_back(val2);
      }
 
      else if(!strcmp(name_info.c_str(), "gain" ))
      {
        info2 >> val2;
        cout << "GAIN" << endl;
        cout << val2 << endl;
        tgain.push_back(val2);
      }
 
      else if(!strcmp(name_info.c_str(), "gantryPosition" ))
      {
        info2 >> val2;
        cout << "GANTRYPOSITION" << endl;
        cout << val2 << endl;
        tgantryPosition.push_back(val2);
      }
 
      else if(!strcmp(name_info.c_str(), "incrementAngle" ))
      {
        info2 >> val2;
        cout << "INCREMENTANGLE" << endl;
        cout << val2 << endl;
        tincrementAngle.push_back(val2);
      }
 
      else if(!strcmp(name_info.c_str(), "offset" ))
      {
        info2 >> val2;
        cout << "OFFSET" << endl;
        cout << val2 << endl;
        toffset.push_back(val2);
      }
 
      else if(!strcmp(name_info.c_str(), "project" ))
      {
        tproject.push_back(info.c_str());
      }
 
      else if(!strcmp(name_info.c_str(), "protocol" ))
      {
        tprotocol.push_back(info.c_str());
      }
 
      else if(!strcmp(name_info.c_str(), "scanTechnique" ))
      {
        tscanTechnique.push_back(info.c_str());
      }
 
      else if(!strcmp(name_info.c_str(), "scanType" ))
      {
        tscanType.push_back(info.c_str());
      }
 
      else if(!strcmp(name_info.c_str(), "sequence" ))
      {
       tsequence.push_back(info.c_str());
      }
 
      else if(!strcmp(name_info.c_str(), "serialNumber" ))
      {
        tserialNumber.push_back(info.c_str());
      }
 
      else if(!strcmp(name_info.c_str(), "series" ))
      {
        tseries.push_back(info.c_str());
      }
 
      else if(!strcmp(name_info.c_str(), "seriesVersion" ))
      {
        tseriesVersion.push_back(info.c_str());
      }
 
      else if(!strcmp(name_info.c_str(), "tablePosition" ))
      {
        info2 >> val2;
        cout << "TABLEPOSITION" << endl;
        cout << val2 << endl;
        ttablePosition.push_back(val2);
      }
 
      else if(!strcmp(name_info.c_str(), "voltage" ))
      {
        info2 >> val2;
        cout << "VOLTAGE" << endl;
        cout << val2 << endl;
        tvoltage.push_back(val2);
      }
 
      else if(!strcmp(name_info.c_str(), "voltageUnit" ))
      {
        tvoltageUnit.push_back(info.c_str());
      }
 
      else if(!strcmp(name_info.c_str(), "spacingunit" ))
      {
        tspacingUnit.push_back(info.c_str());
      }
 
      else
      { 
        cout << "Header line not processed" << endl;
      }
 
      // afficher la ligne à l'écran
      //cout << line << endl;   
    }
 
    //getline(input_file,line);
    //cout << line << endl;
    cout << "End of header" << endl;
    //cout << ttype.at(1) << endl;
 
    //datasize=prod(info.Dimensions)*(info.BitDepth/8);
    //fseek(vff_file_id,-datasize,'eof');
    //input_file.seekg(-trawsize[i],ios::end);
 
    //boost::array<array_type::index,3> dims = {{4, 3, 2}};       
    //data.resize([2][2][2]);
 
    //input_file.seekg(-trawsize.back(),ios::end);
 
    int length = size_j*size_k*2;
	char * buffer = new char [length];
 
	cout << "Reading " << length << " characters... " << endl;
	input_file.read (buffer,length);
 
	if (input_file)
		std::cout << "all characters read successfully." << endl;
	else
		std::cout << "error: only " << input_file.gcount() << " could be read" << endl;
 
	int buffer_i = 0;
	// Assign values to the elements
	for(index j = 0; j < size_j; ++j) {
		for(index k = 0; k < size_k; ++k) {
			printf("%08x %08x \n", *(buffer+buffer_i), *(buffer+buffer_i+1));
//			cout << *(buffer+buffer_i) << " " << *(buffer+buffer_i+1) << endl;
			A[mat_i][j][k] = *(buffer+buffer_i+1);
			buffer_i += 2;
		}
		cin.get();
	}
 
	delete[] buffer;
 
	input_file.close();	
	cin.get();
	mat_i++;
  }
 
}
l'erreur que j'ai est la suivante :
Citation:
test_class.cpp: In member function `void Images::reading(std::string, std::vector<std::string, std::allocator<std::string> >&)':
test_class.cpp:518: error: `index' undeclared (first use this function)
test_class.cpp:518: error: (Each undeclared identifier is reported only once for each function it appears in.)
test_class.cpp:518: error: expected `;' before "j"
test_class.cpp:518: error: `j' undeclared (first use this function)
test_class.cpp:519: error: expected `;' before "k"
test_class.cpp:519: error: `k' undeclared (first use this function)

test_class.cpp:522: error: no match for 'operator[]' in 'A[mat_i]'

make.exe: *** [test_class.o] Error 1

Execution terminated
svagrim est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/03/2013, 01h59   #16
svagrim
Membre du Club
 
Inscription : juin 2007
Messages : 204
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 204
Points : 62
Points : 62
j'ai essayé comme ça aussi (d'après l'aide d'un forum C++ pour quelqu'un qui faisait à peu prêt pareil):

.h
Code :
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
#ifndef TEST_CLASS_H
#define TEST_CLASS_H
 
#include <vector>
#include <string>
#include <boost/multi_array.hpp>
 
#define WANT_TRACE 1
 
/*reading the vff files, header and images, and sort them in the variable ... */
 
typedef boost::multi_array<float, 3> array_type;
typedef array_type::index index;
 
class Images
{   
public:
 
   Images();
   void reading(std::string input, std::vector<std::string> &files);
   array_type data;
 
private:   
   std::vector<std::string> ttype; 
   std::vector<std::vector<int> > tsize; 
   std::vector<int> tbits;
   std::vector<std::string> trank;
   std::vector<std::string> tbands;
   std::vector<int> ty_bin;
   std::vector<int> tz_bin;
   std::vector<float> trfan_y;
   std::vector<float> trfan_z;
   std::vector<float> tmin;
   std::vector<float> tmax;
   std::vector<float> twater;
   std::vector<float> tair;
   std::vector<float> tbonehu;
   std::vector<float> tangle_increment;
   std::vector<float> tcenter_of_rotation;
   std::vector<float> tcentral_slice;
   std::vector<std::vector<float> > tspacing;
   std::vector<std::vector<float> > torigin;
   std::vector<std::string> tformat;
   std::vector<float> telementsize;
   std::vector<std::string> tmodality;
   std::vector<std::string> tdate;
   std::vector<std::string> ttitle;
   std::vector<std::string> tsubject;
   std::vector<std::string> treverse_order;
   std::vector<std::string> trecon_sysid;
   std::vector<std::string> tmacaddr;
   std::vector<int> trawsize;
   std::vector<float> tcurrent;
   std::vector<std::string> tcurrentUnit;
   std::vector<std::string> tdataSourceJID;
   std::vector<std::string> texam;
   std::vector<float> texposure;
   std::vector<float> tframesAverage;
   std::vector<float> tgain;
   std::vector<float> tgantryPosition;
   std::vector<float> tincrementAngle;
   std::vector<float> toffset;
   std::vector<std::string> tproject;
   std::vector<std::string> tprotocol;
   std::vector<std::string> tscanTechnique;
   std::vector<std::string> tscanType;
   std::vector<std::string> tsequence;
   std::vector<std::string> tserialNumber;
   std::vector<std::string> tseries;
   std::vector<std::string> tseriesVersion;
   std::vector<float> ttablePosition; 
   std::vector<float> tvoltage;
   std::vector<std::string> tvoltageUnit;
   std::vector<std::string> tspacingUnit;       
 
};
 
#endif // TEST_CLASS_H
et .cpp
Code :
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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <iostream>
#include <fstream>
#include <string>
#include <sstream>
#include <sys/types.h>
#include <dirent.h>
#include <errno.h>
#include <vector>
#include <conio.h>
#include <algorithm>
#include <functional>
#include <iterator>
 
#include <boost/multi_array.hpp>
 
#include "test_class.h"
using namespace std;
 
typedef boost::multi_array<float, 3> array_type;
typedef array_type::index index;
 
//constructor
Images::Images():data(boost::extents[1][1][1])
//Images::Images()
{
// Create a 3D array that is 1 x 1 x 1 to start
//typedef boost::multi_array<double, 3> array_type;
//typedef array_type::index index;
//array_type A(boost::extents[3][875][568]); 
//A(boost::extents[3][875][568]);              
}
 
//function reading
void Images::reading(string input, vector<string> &files)
{
 
#if WANT_TRACE > 0
  cout << "files are: \"" << input << endl;
  for (vector<string>::iterator it = files.begin() ; it != files.end(); ++it)
    cout << *it << endl;
  cout << "\"" << endl;
#endif
 
data.resize(boost::extents[3][875][568]);
int mat_i = 0;
 
  for (vector<string>::iterator it = files.begin()+2 ; it != files.end(); ++it) 
  {
 
    /* Read projection file*/
#if defined _WIN32 || defined _WIN64
    string sep = "\\";
#else
    string sep = "/";
#endif
 
    string file_to_open = input+sep+*it;
 
#if WANT_TRACE > 0
    cout << "file is: \"" << file_to_open << "\"" << endl;
#endif
 
    ifstream input_file;
    cout << "test" << endl;
    cout << file_to_open << endl;
    input_file.open (file_to_open.c_str(), ifstream::in);
    input_file.seekg(0,ios::beg);
 
    if(input_file == NULL)
    {
      cerr<<"Cannot open input file \n";
      return;
    }
 
    /* Read the header */
    string line;
 
    getline(input_file, line );
 
#if WANT_TRACE > 0	
    cout << "first line :" << endl << line << endl;
#endif
 
    string test ("=");
    size_t found;
	int n;
    int size_j = 0;
	int size_k = 0;
 
    while ( getline(input_file, line ) )
    {
      found = line.find(test);
 
      string name_info;
      string info;
      name_info = line.substr(0,found);
      info = line.substr(found+1,(line.length()-found-2));
      stringstream info2(info); 
      int val; float val2;
 
      if(!strcmp(name_info.c_str(), "type" ))
      {
        ttype.push_back(info.c_str());
      }
      else if(!strcmp(name_info.c_str(), "size" ))
      {
      /*
        //stringstream info2(info); 
        vector<int> vals;
        while(info2.good()) 
        {
          info2 >> val;
          cout << "TAILLE MATRICE" << endl;
          cout << val << endl;
          vals.push_back(val);
          tsize.push_back(vals);
        }
        //delete &vals;
      */
 
        if (info2.good()) {
            info2 >> size_j;
            }
        if (info2.good()) {
            info2 >> size_k;
            }
      }
 
      else if(!strcmp(name_info.c_str(), "bits" ))
      {
        info2 >> val;
        cout << "BITS" << endl;
        cout << val << endl;
        tbits.push_back(val);
      }
 
      else if(!strcmp(name_info.c_str(), "rank" ))
      {
        trank.push_back(info.c_str());
      }
 
      else if(!strcmp(name_info.c_str(), "bands" ))
      {
        tbands.push_back(info.c_str());
      }
 
      else if(!strcmp(name_info.c_str(), "y_bin" ))
      {
        info2 >> val;
        cout << "Y_BIN";
        cout << val << endl;
        ty_bin.push_back(val);
      }
 
      else if(!strcmp(name_info.c_str(), "z_bin" ))
      {
        info2 >> val;
        cout << "Z_BIN";
        cout << val << endl;
        tz_bin.push_back(val);
      }
 
      else if(!strcmp(name_info.c_str(), "rfan_y" ))
      {
        info2 >> val2;
        cout << "RFAN_Y";
        cout << val2 << endl;
        trfan_y.push_back(val2);
      }
 
      else if(!strcmp(name_info.c_str(), "rfan_z" ))
      {
        info2 >> val2;
        cout << "RFAN_Z";
        cout << val2 << endl;
        trfan_z.push_back(val2);
      }
 
      else if(!strcmp(name_info.c_str(), "min" ))
      {
        info2 >> val2;
        cout << "MIN";
        cout << val2 << endl;
        tmin.push_back(val2);
      }
 
      else if(!strcmp(name_info.c_str(), "max" ))
      {
        info2 >> val2;
        cout << "MAX";
        cout << val2 << endl;
        tmax.push_back(val2);
      }
 
      else if(!strcmp(name_info.c_str(), "water" ))
      {
        info2 >> val2;
        cout << "WATER";
        cout << val2 << endl;
        twater.push_back(val2);
      }
 
      else if(!strcmp(name_info.c_str(), "air" ))
      {
        info2 >> val2;
        cout << "AIR";
        cout << val2 << endl;
        tair.push_back(val2);
      }
 
      else if(!strcmp(name_info.c_str(), "bonehu" ))
      {
        info2 >> val2;
        cout << "BONE_HU";
        cout << val2 << endl;
        tbonehu.push_back(val2);
      }
 
      else if(!strcmp(name_info.c_str(), "angle_increment" ))
      {
        info2 >> val2;
        cout << "ANGLE_INCREMENT";
        cout << val2 << endl;
        tangle_increment.push_back(val2);
      }
 
      else if(!strcmp(name_info.c_str(), "center_of_rotation" ))
      {
        info2 >> val2;
        cout << "CENTER_OF_ROTATION";
        cout << val2 << endl;
        tcenter_of_rotation.push_back(val2);
      }
 
      else if(!strcmp(name_info.c_str(), "central_slice" ))
      {
        info2 >> val2;
        cout << "CENTRAL_SLICE";
        cout << val2 << endl;
        tcentral_slice.push_back(val2);
      }
 
      else if(!strcmp(name_info.c_str(), "spacing" ))
      {
        vector<float> vals2;
        while(info2.good()) 
        {
          info2 >> val2;
          cout << "SPACING" << endl;
          cout << val2 << endl;
          vals2.push_back(val2);
          tspacing.push_back(vals2);
        }
        //delete &vals2;
      }
 
      else if(!strcmp(name_info.c_str(), "origin" ))
      {    
        vector<float> vals2;
        while(info2.good()) 
        {
           info2 >> val2;
           cout << "SPACING" << endl;
           cout << val2 << endl;
           vals2.push_back(val2);
           torigin.push_back(vals2);
         }
         //delete &vals2;
      }
 
      else if(!strcmp(name_info.c_str(), "format" ))
      {
        tformat.push_back(info.c_str());
      }
 
      else if(!strcmp(name_info.c_str(), "elementsize" ))
      {
        info2 >> val2;
        cout << "ELEMENTSIZE" << endl;
        cout << val2 << endl;
        telementsize.push_back(val2);
      }
 
      else if(!strcmp(name_info.c_str(), "modality" ))
      {
        tmodality.push_back(info.c_str());
      }
 
      else if(!strcmp(name_info.c_str(), "date" ))
      {
        tdate.push_back(info.c_str());
      }
 
      else if(!strcmp(name_info.c_str(), "title" ))
      {
        ttitle.push_back(info.c_str());
      }
 
      else if(!strcmp(name_info.c_str(), "subject" ))
      {
        tsubject.push_back(info.c_str());
      }
 
      else if(!strcmp(name_info.c_str(), "reverse_order" ))
      {
        treverse_order.push_back(info.c_str());
      }
 
      else if(!strcmp(name_info.c_str(), "recon_sysid" ))
      {
        trecon_sysid.push_back(info.c_str());
      }
 
      else if(!strcmp(name_info.c_str(), "macaddr" ))
      {
        tmacaddr.push_back(info.c_str());
      }
 
      else if(!strcmp(name_info.c_str(), "rawsize" ))
      {
        info2 >> val;
        cout << "RAWSIZE";
        cout << val << endl;
        trawsize.push_back(val);
      }
 
      else if(!strcmp(name_info.c_str(), "current" ))
      {
        info2 >> val2;
        cout << "CURRENT" << endl;
        cout << val2 << endl;
        tcurrent.push_back(val2);
      }
 
      else if(!strcmp(name_info.c_str(), "currentUnit" ))
      {
        tcurrentUnit.push_back(info.c_str());
      }
 
      else if(!strcmp(name_info.c_str(), "dataSourceJID" ))
      {
        tdataSourceJID.push_back(info.c_str());
      }
 
      else if(!strcmp(name_info.c_str(), "exam" ))
      {
        texam.push_back(info.c_str());
      }
 
      else if(!strcmp(name_info.c_str(), "exposure" ))
      {
        info2 >> val2;
        cout << "EXPOSURE" << endl;
        cout << val2 << endl;
        texposure.push_back(val2);
      }
 
      else if(!strcmp(name_info.c_str(), "framesAverage" ))
      {
        info2 >> val2;
        cout << "FRAMESAVERAGE" << endl;
        cout << val2 << endl;
        tframesAverage.push_back(val2);
      }
 
      else if(!strcmp(name_info.c_str(), "gain" ))
      {
        info2 >> val2;
        cout << "GAIN" << endl;
        cout << val2 << endl;
        tgain.push_back(val2);
      }
 
      else if(!strcmp(name_info.c_str(), "gantryPosition" ))
      {
        info2 >> val2;
        cout << "GANTRYPOSITION" << endl;
        cout << val2 << endl;
        tgantryPosition.push_back(val2);
      }
 
      else if(!strcmp(name_info.c_str(), "incrementAngle" ))
      {
        info2 >> val2;
        cout << "INCREMENTANGLE" << endl;
        cout << val2 << endl;
        tincrementAngle.push_back(val2);
      }
 
      else if(!strcmp(name_info.c_str(), "offset" ))
      {
        info2 >> val2;
        cout << "OFFSET" << endl;
        cout << val2 << endl;
        toffset.push_back(val2);
      }
 
      else if(!strcmp(name_info.c_str(), "project" ))
      {
        tproject.push_back(info.c_str());
      }
 
      else if(!strcmp(name_info.c_str(), "protocol" ))
      {
        tprotocol.push_back(info.c_str());
      }
 
      else if(!strcmp(name_info.c_str(), "scanTechnique" ))
      {
        tscanTechnique.push_back(info.c_str());
      }
 
      else if(!strcmp(name_info.c_str(), "scanType" ))
      {
        tscanType.push_back(info.c_str());
      }
 
      else if(!strcmp(name_info.c_str(), "sequence" ))
      {
       tsequence.push_back(info.c_str());
      }
 
      else if(!strcmp(name_info.c_str(), "serialNumber" ))
      {
        tserialNumber.push_back(info.c_str());
      }
 
      else if(!strcmp(name_info.c_str(), "series" ))
      {
        tseries.push_back(info.c_str());
      }
 
      else if(!strcmp(name_info.c_str(), "seriesVersion" ))
      {
        tseriesVersion.push_back(info.c_str());
      }
 
      else if(!strcmp(name_info.c_str(), "tablePosition" ))
      {
        info2 >> val2;
        cout << "TABLEPOSITION" << endl;
        cout << val2 << endl;
        ttablePosition.push_back(val2);
      }
 
      else if(!strcmp(name_info.c_str(), "voltage" ))
      {
        info2 >> val2;
        cout << "VOLTAGE" << endl;
        cout << val2 << endl;
        tvoltage.push_back(val2);
      }
 
      else if(!strcmp(name_info.c_str(), "voltageUnit" ))
      {
        tvoltageUnit.push_back(info.c_str());
      }
 
      else if(!strcmp(name_info.c_str(), "spacingunit" ))
      {
        tspacingUnit.push_back(info.c_str());
      }
 
      else
      { 
        cout << "Header line not processed" << endl;
      }
 
      // afficher la ligne à l'écran
      //cout << line << endl;   
    }
 
    cout << "End of header" << endl;
 
    int length = size_j*size_k*2;
	char * buffer = new char [length];
 
	cout << "Reading " << length << " characters... " << endl;
	input_file.read (buffer,length);
 
	if (input_file)
		std::cout << "all characters read successfully." << endl;
	else
		std::cout << "error: only " << input_file.gcount() << " could be read" << endl;
 
	int buffer_i = 0;
	// Assign values to the elements
	for(index j = 0; j < size_j; ++j) {
		for(index k = 0; k < size_k; ++k) {
			printf("%08x %08x \n", *(buffer+buffer_i), *(buffer+buffer_i+1));
//			cout << *(buffer+buffer_i) << " " << *(buffer+buffer_i+1) << endl;
			data[mat_i][j][k] = *(buffer+buffer_i+1);
			buffer_i += 2;
		}
		cin.get();
	}
 
	delete[] buffer;
 
	input_file.close();	
	cin.get();
	mat_i++;
  }
 
}
là ça compile. mais le code plante direct. "le projet a cessé de fonctionné".
svagrim est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/03/2013, 09h42   #17
Bousk
Modérateur
 
Homme Cyrille
Network programmer
Inscription : juin 2010
Messages : 1 553
Détails du profil
Informations personnelles :
Nom : Homme Cyrille
Âge : 25
Localisation : France

Informations professionnelles :
Activité : Network programmer

Informations forums :
Inscription : juin 2010
Messages : 1 553
Points : 4 109
Points : 4 109
Bonjour,

sans faire avancer le schmilblik, trop de code à relire.
Si ça compile c'est déjà pas mal, si "ça a cessé de fonctionné", tu as surement un accès mémoire interdit. Et pour ça, tu dois maintenant utiliser un debugger.

Ce qui ne m'étonne pas particulièrement parce que... que ce code est moche !

Tu es en C++, tu utilises std::string et... tu utilises strcmp...
C'est un peu de l'hérésie..
La fonction c_str est bien pratique mais c'est pas obligatoire de l'utiliser et en abuser à toutes les sauces !

Remercions la stl de surcharger les opérateurs pour pouvoir utiliser ce que nous faisons tous naïvement pour comparer des chaînes de caractères (et source de nombreux messages "pourquoi conschar*1 == constchar*2 est toujours faux ?"). Si vraiment tu veux garder le fonctionnement en méthode type strcmp, on a la méthode compare.
Encore plus fort : pourquoi ajouter via string::c_str dans un vector de... string ?

Egalement de nombreux header qui sont issus du C qui gagneraient à être remplacés par leur pendant C++.
Bousk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/03/2013, 15h49   #18
koala01
Modérateur
 
Avatar de koala01
 
Philippe Dunski
Inscription : octobre 2004
Messages : 8 626
Détails du profil
Informations personnelles :
Nom : Philippe Dunski
Âge : 41

Informations forums :
Inscription : octobre 2004
Messages : 8 626
Points : 13 346
Points : 13 346
Envoyer un message via MSN à koala01 Envoyer un message via Skype™ à koala01
Salut,

Il y a, quand même, quelque chose qui m'échappe plus ou moins...

Je n'arrive absolument pas à comprendre pourquoi la classe Images (qui, si j'ai bien compris, sert de gestionnaire d'images ) est composée de... 50 tableaux différents

A priori, une image est une image, quelle que soit la chose qu'elle doit représenter.

S'il te faut faire la différence entre une image et une autre, tu ne devrais avoir à le faire qu'au niveau d'un "identificateur unique" qui identifie de manière unique et non ambigüe une image particulière (le nom du fichier dont elle est tirée , un index représentant sa position dans un vecteur , une clé permettant de l'identifier dans une map ou un set )

Si, comme je le comprends, Images est une collection d'images, alors, c'est que tu devrais avoir une classe (de base ) Image qui permet, outre le fait d'afficher le graphisme en question "quelque part", de distinguer une image d'une autre.

La manière dont les différents "graphismes" sont générés, manipulés, modifiés ne devant dépendre, au final, que du type d'images utilisé

Si tu veux créer une image basée sur la valeur d'un réel, d'un entier ou d'une chaine de caractères, il faut juste de quoi convertir le rée ou l'entier en chaine de caractères et utiliser un seul algorithme qui permet de créer une image sur base de la chaine de caractères

Si, pour une raison ou une autre, (parce que le score a augmenté de 100, par exemple), ce qui doit être représenté par l'image a été modifié, il "suffit" de recréer l'image avant de l'afficher

bref, il me semble clairement y avoir un problème "quelque part" avec ta classe.

Mais comme tu ne nous as pas dit jusqu'à présent ce que tu voulais faire de ta classe Images, il nous sera sans doute difficile de te dire comment y arriver
__________________
A méditer: La solution la plus simple est toujours la moins compliquée
Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
Compiler Gcc sous windows avec MinGW
je ne répondrai à aucune question technique par E-mail, message visiteur ou message privé
Vous avez obtenu votre réponse pensez au bouton en bas de page
koala01 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/03/2013, 16h49   #19
leternel
Expert Confirmé
 
Homme Pierre
Ingénieur développement logiciels
Inscription : juin 2007
Messages : 1 220
Détails du profil
Informations personnelles :
Nom : Homme Pierre
Localisation : France

Informations professionnelles :
Activité : Ingénieur développement logiciels

Informations forums :
Inscription : juin 2007
Messages : 1 220
Points : 2 596
Points : 2 596
D'ailleurs, si tu veux un point de comparaisons, dans l'API OpenGL, les textures sont manipulés via des entiers, qui sont des indices dans un tableau interne à l'API
__________________
Mes principes de bases du codeur qui veut pouvoir dormir:
  • Une variable de moins est une source d'erreur en moins.
  • Un pointeur de moins est une montagne d'erreurs en moins.
  • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
  • La plus sotte des questions est celle qu'on ne pose pas.
leternel est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/03/2013, 17h55   #20
svagrim
Membre du Club
 
Inscription : juin 2007
Messages : 204
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 204
Points : 62
Points : 62
je vais commencer à répondre mais je pars bientot en conférence alors je finirais peut être plus tard.

alors oui j'ai pas utilisé de C++ depuis très longtemps, j'ai fait les tutoriel du site du zero et j'ai relu un bouquin de c++ pour me remettre dedans mais bien sur, il faut que je recode pour me rappeller du c++.

pour les std::string. ba c'était de faire comme ça dans des tutoreils spécialisé C++ alors pour le moment j'ai "recopié" bêtement. avec l'expérience je comprendrais peut etre pourquoi il faut pas faire ça mais pour le moment je vois pas.

pareil pour strcmp j'ai trouvé ça sur un site de c++ et j'ai réussi à m'en sortir avec du coup j'étais content. je sais pas pourquoi ça n'a pas sa place en c++.
je vais regarder ton lien en tout cas merci !

pour le .c_str dans un vector de string, j'ai modifié des tableaux qui n'était pas des strings pour les faires passer en string dernièrement. fort bien possible que il y a des .c_str à enlever du coup. je vais regarder ça. merci !

pour la classe image elle comprend de nombreux tableaux parce que je fais du traitement d'images multi-modale.
en gros à la fin je me retrouve avec un volume d'image, à plusieurs temps, pris à des endroits un peu différent dans l'espace, avec une fois sur deux ou une fois sur trois une modalité d'imagerie différente, et une fois sur deux un état de l'échantillon différent (expiration, inspiration).

les tableaux servent à répertorier toutes les conditions d'imageries différentes et les variables qui entrent dans des équations pour calculer des phénomènes physiologique à partir de l'ensemble de ses images.
les valeurs de certains de ses tableaux sont directement des variables de ses équations, d'autres servent à dire, cette équation va servir pour ces images, cette équation pour celles là etc ...
l'image en cas d'inspiration tu va la pondérer avec telle fonction dépendant du temps si on souhaite utiliser ce modèle mathématique, avec telle autre si on souhaite utiliser un autre modèle mathématique.
idème pour les images en cas d'expiration etc ....

je voudrais que la classe image me serve à avoir toutes ses données à disposition, pour après à partir d'autres fonctions dépendant notamment des modèles pharmaco-cinétique que je veux utiliser je puisse modifier mes images avec mes pondérations et lancer les calculs des paramètres physiologique.

voilà j'espère que c'est un peu plus claire.
svagrim est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 23h05.


 
 
 
 
Partenaires

Hébergement Web