error: expected constructor, destructor, or type conversion before '=' token

error: expected constructor, destructor, or type conversion before '=' token

我有一个class CompNum,我需要他用值0初始化私有静态crry变量(变量必须 保密)。

所以我创建了一个 public 函数返回 crry 变量的引用,以便能够使用 carry() 函数更改该变量。

class CompNum {
private:
    typedef char littlenum;
    static littlenum crry;
    ...
public:
    static littlenum& carry() { /*Do something with crry*/ return crry; }
    ...
};

CompNum::carry() = 0;

编译这个,它抛出这个错误:

error: expected constructor, destructor, or type conversion before '=' token

行中:

 CompNum::carry() = 0;

目标:

这里的目标是能够更改 crry 变量,但每次我想更改它时都需要先做一些事情,所以 CompNum::crry = 123 不是解决方案,这就是我认为的原因我需要一个 public 方法来实现。

当你声明一个static成员变量时,你实际上只是指定它存在,而不是为它创建存储。您需要 "define" 它在 class 之外:

CompNum::littlenum CompNum::crry;

完整代码:

class CompNum {
private:
    typedef char littlenum;
    static littlenum crry;
public:
    static littlenum& carry() { /*Do something with crry*/ return crry; }
};
CompNum::littlenum CompNum::crry;

int main()
{
   CompNum::carry() = 0;
}

Live on Coliru