2017-02-14 3 views
-1

Je le code suivant. ':cpp: l'expression primaire attendue avant jeton

class SSLHashSHA1 
{ 
    SSLHashSHA1(); 
    ~SSLHashSHA1(); 
    public: 
     static OSStatus update(string*, int*); 
     static OSStatus final (string*, string*); 
}; 

OSStatus SSLHashSHA1::update(string* ctx, int* ran){ 
    return 0; 
} 

OSStatus SSLHashSHA1::final(string* ctx, string* out){ 
    return 0; 
} 

static OSStatus SSLVerifySignedServerKeyExchange(
    SSLContext *ctx, bool isRsa, SSLBuffer signedParams, uint8_t *signature, uint16_t signatureLen) 
{ 
    OSStatus err; 

    if ((err = SSLHashSHA1.update(&hashCtx, &serverRandom)) != 0) 
     goto fail; 
    if ((err = SSLHashSHA1.update(&hashCtx, &signedParams)) != 0) 
     goto fail; 
     goto fail; 
    if ((err = SSLHashSHA1.final(&hashCtx, &hashOut)) != 0) 
     goto fail; 


    fail: 
     SSLFreeBuffer(&signedHashes); 
     SSLFreeBuffer(&hashCtx); 
     return err; 
} 

Et je reçois l'erreur mentionnée dans la rubrique. Je comprends cela pour les appels SSLHashSHA1.update et SSLHashSHA1.final. Pourquoi je reçois ça?

Je pensais que lorsque je rends statique des fonctions de classe, je peux les utiliser sans avoir à créer un objet. Ou devrais-je changer la classe en une structure ou quelque chose comme ça?

+0

Ecrire 'SSLHashSHA1 :: mise à jour (et hashCtx, et ServerRandom)' pour appeler des fonctions membres statiques. –

Répondre

2
SSLHashSHA1.update() 

Ceci est totalement faux, SSLHashSHA1 est une classe, pas une instance, de sorte que vous ne pouvez pas utiliser l'opérateur . pour invoquer une méthode ici, au lieu, comme vous l'avez mentionné, que votre update est une fonction statique, appelez donc à l'aide de l'opérateur portée résolution (::) comme ceci:

SSLHashSHA1::update(&hashCtx, &serverRandom))