Newsgroup: it.comp.lang.c++
Titolo: error before parse '{'

cosa signifiga    error before parse '{'
mi viene dato quando cerco di compirlare un codice di questo tipo
init final e update sono funzioni private.
in una classe definisco una variabile privata
class pippo
{ pippo(void);
   ....
  private:
int init(..) ;
int final(....)  ;  /* per comodità non ho scritto tutte le intestazioni
int update(...)  ;
  my_struct smd;
};
nel costruttore
pippo::pippo(void)
{  ...
smd= {
   NID_sha1,
   NID_sha1WithRSAEncryption,
   SHA_DIGEST_LENGTH,
   0,
   init,
   update,
   final,
   NULL,
   NULL,
   EVP_PKEY_RSA_method2,
   SHA_CBLOCK,
   sizeof( EVP_MD * ) + sizeof( SHA_CTX ),
};
}

pippo::pippo(void)
^^^^^^^^^^^^^
se non ricordo male in caso di non passaggio di parametri il
costruttore non deve avere void usa
pippo()

il void non è richiesto ma non fa male...
il punto è che se metto come commento la parte di assegnazione della 
struttura
smd= {
   NID_sha1,
   NID_sha1WithRSAEncryption,
   SHA_DIGEST_LENGTH,
   0,
   init,
   update,
   final,
   NULL,
   NULL,
   EVP_PKEY_RSA_method2,
   SHA_CBLOCK,
   sizeof( EVP_MD * ) + sizeof( SHA_CTX ),
};
non da + errori  ... il prob quindi è qui.



No, non e' quello l'errore. Il void e' sicuramente superfluo in C++ (a 
differenza del C) ma non costituisce un errore.
HTH
===
Gianni


Non e' possibile inizializzare la variabile di tipo my_struct nel corpo 
del costruttore come stai facendo. Devi inizializzare campo per campo. 
Se la tua struttura  ha un costruttore puoi invocarlo in questa maniera
pippo::pippo () : smd (/* parametri costruttore*/)
{
	/* corpo del costruttore */
}
NOTA BENE: per come hai dichiarato pippo il costruttore e' privato 
quindi nessuno puoi creare un'oggetto di tipo pippo.

metti che voglio dichiare uno a uno i vari membri
la struttura è questa
struct env_md_st
	{
	int type;
	int pkey_type;
	int md_size;
	unsigned long flags;
	int (*init)(EVP_MD_CTX *ctx);
	int (*update)(EVP_MD_CTX *ctx,const void *data,unsigned long count);
	int (*final)(EVP_MD_CTX *ctx,unsigned char *md);
	int (*copy)(EVP_MD_CTX *to,const EVP_MD_CTX *from);
	int (*cleanup)(EVP_MD_CTX *ctx);
	/* FIXME: prototype these some day */
	int (*sign)();
	int (*verify)();
	int required_pkey_type[5]; /*EVP_PKEY_xxx */
	int block_size;
	int ctx_size; /* how big does the ctx->md_data need to be */
	} /* EVP_MD */;
per i valori non ci sono prbo.. ma per le funzioni   tipo   init  .
tutte funzioni che appartengono alla classe di appartenenza di sha1_md.
sha1a_md.type=NID_sha1;
sha1a_md.pkey_type=NID_sha1WithRSAEncryption;
sha1a_md.md_size=SHA_DIGEST_LENGTH;
sha1a_md.flags=0;
sha1a_md.init=NULL; //
sha1a_md.update=NULL; //
sha1a_md.final=NULL; //
sha1a_md.copy=NULL;
sha1a_md.cleanup=NULL;
sha1a_md.sign=NULL;   //
sha1a_md.verify=NULL; //
sha1a_md.required_pkey_type[0]=EVP_PKEY_RSA;
sha1a_md.required_pkey_type[1]=EVP_PKEY_RSA2;
sha1a_md.required_pkey_type[2]=0;
sha1a_md.required_pkey_type[3]=0;
sha1a_md.block_size=SHA_CBLOCK;
sha1a_md.ctx_size=sizeof( EVP_MD * ) + sizeof( SHA_CTX );
grazie


 non da + errori  ... il prob quindi è qui.
Forse hai messo una virgola di troppo alla fine della riga sotto:
     sizeof( EVP_MD * ) + sizeof( SHA_CTX ),
                                          ^^^
Ciao!