错误:在'='标记之前的预期构造函数,析构函数或类型转换

时间:2016-07-06 17:29:42

标签: c++ static-members

我有一个CompNum类,我需要他初始化私有静态 crry 变量,其值为0(变量必须是私有的。)

所以我创建了一个返回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不是解决方案,这就是为什么我认为我需要实现这一目标的公共方法。

1 个答案:

答案 0 :(得分:2)

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

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