Bonjour à tous!
Au risque de passer pour un gros , j'aimerais avoir quelques explications sur des choses, il faut bien le dire, de base.
En effet, tout le monde sera d'accord, lorsque le programme devient conséquent, il est déconseillé de mettre toutes mes fonctions dans le main, celà rent le programme illisible!

On crée donc des fichiers annexes (.cpp) auxquels on a coutume de rajouter un .h pour la déclaration des prototypes de fonctions...
Jusque là tout va bien.

Le .h ira dans le main, mais doit il quand même être déclaré dans le fichier annexe.cpp aussi non?
Quand faut-il faire usage du mot clé extern? N'y a t-il pas de risques de multi-déclarations?

Dans le cas, d'un mélange de fichiers .c et .cpp, comment doit se passer ces déclarations? Et j'irai même plus loin: dans mon projet, j'ai un mélange de template, de fonctions C++ "normales" et des fonctions dans un fichier C. Comment doit-on organiser ces déclarations?

Les templates, je les ai mis dans un .h (sur les conseils de Miles), et j'ai un problème de déclaration au niveau de mon fichier calc_camir.c (d'où ce post!)

Voici mon 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

#include <list>
#include <algorithm>
#include <iostream>
#include "calc_camir.h" // header de mon fichier C
 
// Les 3 fonctions exportées de la DLL tsrir_c.dll
extern "C" int IRnb_images( int num_choc, int camera, int *nbimages );
extern "C" int IRimages( int num_choc, int camera, long image_deb,
long image_fin, unsignedshort ** Images);
extern "C" int IRimages_pas( int num_choc, int camera, long image_deb,
long image_fin, long pas, unsignedshort ** Images );
 
#include "CImg.h"
usingnamespace cimg_library;
#include "analyse.h"   // templates nécessitant CImg
#include "quadrillage.h"
#include "warping.h"
#include "masque.h"
#include "outils.h"
#include "choixzone.h"
 
int main() { etc....
et voici le calc_camir.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
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

 
#ifndef _CALCCAMIR_H // Pour éviter des warnings de redéfinitions lors de la compilation.
#define _CALCCAMIR_H
//-------------------------------------------------------------------------------------
// Chemin des LUT
#define DVCAMIR_NFS_LUT_DIR "F:\\lut\\"
//-------------------------------------------------------------------------------------
// PTSSURLUT doit être >=7 car sinon 3*2^14>MAXPTSLUT avec MAXPTSLUT=500;
#define PTSSURLUT 8 // On prend 1 point sur 2^PTSSURLUT pour définir la LUT
#define MAXPTSLUT 500 // Nb MAX de points max sur chaque LUT
#define MAXSIZELINE 100 // Nb MAX de caracteres d'une ligne
#define MAXDATAINFILE 2000 // Nb MAX de caracteres dans le fichier LUT
#define MAXDATALUT 200 // Nb MAX de données de la LUT brute
//-------------------------------------------------------------------------------------
#ifndef GEMINY
#define GEMINY 01
#endif
#ifndef INDIGO
#define INDIGO 02
#endif
#define NUM_LUMV12_MAX 12
#define NB_FENETRES 16
// Stocke un fichier LUT en mémoire.
char FileLUTStockMem[MAXDATAINFILE];
typedefstruct
{
float Temp_Fut; // Température du fut optique
float Temp_Prisme; // Température du prisme
float Temp_Saphir; // Température de la fenetre saphir
float Trans_Fut[2]; // Transmission du fut optique
float Trans_Prisme[2]; // Transmission du prisme
float Trans_Saphir[2]; // Transmission de la fenetre saphir
short Type; // Type de caméra (Geminy (1) ou Indigo (2))
short PtsLUT; // Nb de points dans LUT1 et LUT2
float LUT1[MAXPTSLUT]; // LUT pour la zone 1
float LUT2[MAXPTSLUT]; // LUT pour la zone 2
int PosArrete; // Position de l'arrete qui sépare les 2 zones du LPT
char LUT1FilePath[256]; // Chemin vers le fichier de la LUT1.
char LUT2FilePath[256]; // Chemin vers le fichier de la LUT2.
char LUT3FilePath[256]; // Chemin vers le fichier de la LUT3.
} struct_endoscope;
struct_endoscope Endoscope[12];
 
 
#define Longint long
extern Longint TSRqParm (Longint NumChoc, char* NomProd, char* NomObjet,
char*NomParam, Longint NbVal, char**valeurs,
Longint* NbElem, Longint * format ); // pour une DLL

 
// ---------> Interpolation linéaire des données
short Interpol (long *xTab, long *yTab, int lTab, float xVal, float *yVal);
// ---------> Reset de la structure Endoscope (tout à 0)
void Reset_Endoscope (struct_endoscope *Endoscope);
// ---------> Lecture d'une variable de type float dans Top
short LitTopFloat(long nchoc, char *NmProd, char *NmObj, char *NmPar, float *Val);
// ---------> Lecture d'une variable de type String dans Top
short LitTopString(long nchoc, char *NmProd, char *NmObj, char *NmPar, char *Str);
// ---------> Lecture d'un fichier LUT .txt (calibration)
short ReadFicLUT (char *NmFicLUT, long *xLUTi, long *yLUTi, short *lLUTi);
// ---------> Construction de la LUT finale pour passer des DL en T°
short ConstructLUT (long *xLUTi, long *yLUTi, short lLUTi,
short NumLUT, short Zone, struct_endoscope *Endoscope,
float *xLUT , float *yLUT , short *lLUT );
// ---------> Lecture des fichiers de calibration LUT1 ou 2 ou 3
short InitLUT (long nchoc, short nEndo, short nLUT, long *xLUTi, long *yLUTi, short *lLUTi);
// ---------> Recopie de la LUT calibrée dans les varaibles de la structure Endoscope
void RecopieLUT(struct_endoscope *Endoscope , short Zone , float *DL , float *TP ,
short lDL);
// ---------> Lecture des données Top et initialisation de la structure Endoscope
short Init_Endoscope (long nchoc, short nEndo, struct_endoscope *Endoscope);
// ---------> Calcul de la T° à partir des DL mesurés
short DL2Temp (struct_endoscope *Endoscope, short zone, long DL, float *Temp);
// ---------> Calcul du DL à partir d'une température
short Temp2DL (struct_endoscope *Endoscope, short zone, float Temp, long *DL);
 
#endif
Je ne sais pas trop comment m'en sortir, j'ai des erreurs bizarres: soit il ne connait pas la structure, soit j'ai des milliers d'erreurs...

Bref, je crois que j'ai grandement besoin de votre aide