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 :
- 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 :
- init( ... ){
- ...
- X509 *mycert;
- ...
- PEM_read_X509(fp, &mycert, 0, NULL);
- gMyCert(mycert);
- ...
- }
|
Quand je compile ca me donne l'erreur suivante :
Code :
- 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 :
- 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 :
- init( ){
- X509 *mycert;
- ...
- PEM_read_X509(fp, &mycert, 0, NULL)
- ...
- certificate<string> gMyCert(mycert);
- }
|
Merci d'avance pour votre aide.