Bonjour,
j'aimerais savoir comment je peux initialiser une structure ( en dehors de la déclaration ) :
En effet, je déclare d'abord la structure en faisant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
certificate<string> gMyCert;
Cet objet certificat est accessible depuis n'importe quelle fonction de mon_fic.cpp
puis j'aimerais l'initialiser dans une fonction qui se trouve toujours dans mon_fic.cpp :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
init( ... ){
 ...
 X509 *mycert;
 ...
 PEM_read_X509(fp, &mycert, 0, NULL);
 gMyCert(mycert);
 ...
}
Quand je compile ca me donne l'erreur suivante :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
error: no match for call to ‘(isl::certificate<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >) (X509*&)
Je ne comprend pas ce qui se passe. Il me dit no match for call alors que j'ai bien un constructeur certificate(X509* cert). Voici la définition de ma structure certificate :
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
 
template<class StrType> struct certificate : shared {
 
   StrType  uri;
   StrType  sn;
   StrType  data;
 
 
  bool invalid() const { return (uri.empty() || sn.empty() || data.empty()); } 
  bool valid() const { return !invalid(); }
  certificate() {}
 
 
   certificate(X509* cert){
     // retrieve data
     unsigned char *u_out;
     u_out = NULL;
     size_t certlen;
     certlen = i2d_X509(cert, &u_out); 
     char *out = reinterpret_cast<char *>(u_out);
     data = out;
 
     // retrieve uri <=> common name
     X509 *mycert = cert;
     char commonName[512];
     X509_NAME * name = X509_get_subject_name(mycert);
     X509_NAME_get_text_by_NID(name, NID_commonName, commonName, 512);
     uri = commonName;
 
     // retrieve sn
     char serialNumber[512];
     X509_NAME_get_text_by_NID(name, NID_serialNumber, serialNumber, 512);
     sn = serialNumber;
   }
 
   certificate(const certificate& other) : uri(other.uri), sn(other.sn), data(other.data) { }
 
 };

Ce qui m'étonne c'est que ca compile quand je déclare la structure dans la fonction init( ) ... c'est à dire
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
init( ){
X509 *mycert;
...
PEM_read_X509(fp, &mycert, 0, NULL)
...
certificate<string> gMyCert(mycert);
}
Merci d'avance pour votre aide.