2017-02-14 2 views
-1

У меня есть следующий код «»:каст: ожидается, первичное выражение, прежде чем маркер

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; 
} 

И я получаю сообщение об ошибке, указанное в заголовке. Я получаю это для SSLHashSHA1.update и SSLHashSHA1.final звонков. Почему я это понимаю?

Я думал, что когда я создаю функции класса-члена static, я могу использовать без создания объекта. Или я должен изменить класс на структуру или что-то в этом роде?

+0

записи 'SSLHashSHA1 :: обновление (& hashCtx, и serverRandom)' для вызова статических функций-членов. –

ответ

2
SSLHashSHA1.update() 

Это совершенно неправильно, SSLHashSHA1 класс, не экземпляр, так что вы не можете использовать оператор . для вызова метода здесь, вместо того, как вы упомянули, что ваш update является статической функцией, следовательно, вызвать его, используя оператор сферы разрешения (::), как это:

SSLHashSHA1::update(&hashCtx, &serverRandom)) 
Смежные вопросы