我有一个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
不是解决方案,这就是为什么我认为我需要实现这一目标的公共方法。
答案 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;
}