cpp:“。”标记之前的预期主表达式

Posted

技术标签:

【中文标题】cpp:“。”标记之前的预期主表达式【英文标题】:cpp: expected primary-expression before ‘.’ token 【发布时间】:2017-02-14 10:51:13 【问题描述】:

我有以下代码:

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 调用。 为什么会这样?

我认为当我将类成员函数设为静态时,我可以使用 而不需要创建对象。还是我应该将类更改为结构或类似的东西?

【问题讨论】:

SSLHashSHA1::update(&hashCtx, &serverRandom)调用静态成员函数。 【参考方案1】:
SSLHashSHA1.update()

这是完全错误的,SSLHashSHA1 是一个类,而不是一个实例,所以你不能在这里使用 . 运算符来调用一个方法,相反,正如你所提到的,你的 update 是一个静态的函数,因此使用范围解析运算符 (::) 调用它,如下所示:

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

【讨论】:

以上是关于cpp:“。”标记之前的预期主表达式的主要内容,如果未能解决你的问题,请参考以下文章

c++ if (DEBUG) ... '==' 标记之前的预期主表达式

无法弄清楚出了啥问题:“')'标记之前的预期主表达式”

联合初始化程序“错误:‘。’标记之前的预期主表达式”

错误:“双重”修复之前的预期主表达式?

矩阵类:错误:“)”标记之前的预期主表达式

* C++ 之前的预期主表达式