error: no match for call to

error: no match for call to - C++ - Programmation

Marsh Posté le 04-04-2011 à 17:57:24    

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 :
  1. 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 :
  1. init( ... ){
  2. ...
  3. X509 *mycert;
  4. ...
  5. PEM_read_X509(fp, &mycert, 0, NULL);
  6. gMyCert(mycert);
  7. ...
  8. }


 
Quand je compile ca me donne l'erreur suivante :

Code :
  1. 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 :
  1. template<class StrType> struct certificate : shared {
  2.  
  3.    StrType  uri;
  4.    StrType  sn;
  5.    StrType  data;
  6.  
  7.   bool invalid() const { return (uri.empty() || sn.empty() || data.empty()); }
  8.   bool valid() const { return !invalid(); }
  9.   certificate() {}
  10.      
  11.  
  12.    certificate(X509* cert){
  13.      // retrieve data
  14.      unsigned char *u_out;
  15.      u_out = NULL;
  16.      size_t certlen;
  17.      certlen = i2d_X509(cert, &u_out);
  18.      char *out = reinterpret_cast<char *>(u_out);
  19.      data = out;
  20.      // retrieve uri <=> common name
  21.      X509 *mycert = cert;
  22.      char commonName[512];
  23.      X509_NAME * name = X509_get_subject_name(mycert);
  24.      X509_NAME_get_text_by_NID(name, NID_commonName, commonName, 512);
  25.      uri = commonName;
  26.      // retrieve sn
  27.      char serialNumber[512];
  28.      X509_NAME_get_text_by_NID(name, NID_serialNumber, serialNumber, 512);
  29.      sn = serialNumber;
  30.    }
  31.    certificate(const certificate& other) : uri(other.uri), sn(other.sn), data(other.data) { }
  32.  
  33. };


 
Ce qui m'étonne c'est que ca compile quand je déclare la structure dans la fonction init( ) ... c'est à dire

Code :
  1. init( ){
  2. X509 *mycert;
  3. ...
  4. PEM_read_X509(fp, &mycert, 0, NULL)
  5. ...
  6. certificate<string> gMyCert(mycert);
  7. }


 
Merci d'avance pour votre aide.

Reply

Marsh Posté le 04-04-2011 à 17:57:24   

Reply

Marsh Posté le 05-04-2011 à 10:59:53    


il est fort possible que je me gourre, mais pour moi dans le 2eme cas tu appelles le constructeur, et dans le premier tu appelles operator()


Message édité par GrosBocdel le 05-04-2011 à 11:00:07
Reply

Marsh Posté le 05-04-2011 à 13:44:32    

en fait on m'a dit que dans le premier cas j'appelle le constructeur par défaut  :gMyCertcertificate<string> gMyCert; équivaut à gMyCertcertificate<string> gMyCert( )

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed