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 :
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 :
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 :
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 :
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
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.
Partager