gpt4 book ai didi

c++ - 为什么我不能在初始化列表中初始化静态变量?

转载 作者:太空狗 更新时间:2023-10-29 20:05:04 25 4
gpt4 key购买 nike

我正在尝试使用以下代码:

class Test 
{
private:
static int x;
public:
Test(int i) : x(i) {}
};
main()
{
Test a(5);
}

但是,然后我得到了错误:

‘int Test::x’ is a static data member; it can only be initialized at its definition

上面的实现有什么问题?

最佳答案

错误消息非常准确地告诉您问题所在。

问题是一个静态成员只有一个实例,不管你碰巧创建了多少个类的实例。您只需初始化一次,即使您创建了该类的多个实例——这意味着它不能附加到构造函数。

class Test 
{
private:
static int x;
public:

};

int Test::x = 1; // newly added

main()
{
Test a;
}

在这种情况下,看起来您可能根本不需要静态成员变量——您在创建类的实例时传递了一个值来初始化它,这往往表明您可能只是想要一个普通的成员变量:

class Test 
{
private:
int x;
public:
Test(int i) : x(i) {}
};

main()
{
Test a(5);
}

在这种情况下,如果您想要具有不同值的对象的第二个实例,您可以这样做:

main() { 
Test a(5), b(1);
}

关于c++ - 为什么我不能在初始化列表中初始化静态变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15515179/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com