gpt4 book ai didi

c++ - C++中的静态成员

转载 作者:太空狗 更新时间:2023-10-29 23:54:13 25 4
gpt4 key购买 nike

我正在尝试使用 C++ 中的 static 关键字。下面的类有一个名为 size 的静态变量,它被初始化为 10。

class staticTest
{
public:
static int size;
int x,y;

staticTest()
{
x=0;
y=0;
}
void display()
{
printf("%d %d\n",x,y);
}
};
int staticTest::size=10;

现在我有另一个使用这个静态变量的类。这是另一个类

class my
{
public:
int a[staticTest::size];

my()
{
for(int i=0;i<staticTest::size;i++)
{
a[i]=i;
}
}

void display()
{
for(int i=0;i<staticTest::size;i++)
{
printf("%d\n",a[i]);
}
}
};

现在我有这样的主要功能

main()
{
my ni;
ni.display();
}

我无法编译这个程序。错误是数组绑定(bind)不是整数常量。为什么会这样?

最佳答案

只有编译时常量可以用作数组大小。

将您的整数声明为 static const int

此外,(默认)值需要放在声明中,而不是定义中:

// in header
class Foo {
public:
static const int n = 10;
};

// in implementation
const int Foo::n;

根据您的评论,考虑一下:目前,您正在有效地使用全局变量 来传达一些动态量。这应该敲响警钟:

int size; // global

void some_UI_function(); // modifies `size`?!

void some_computation()
{
int data[size]; // pseudo-code
// ...
}

出于各种原因,这是一个糟糕的设计。相反,您应该将相关尺寸作为类(class)的一部分:

class my
{
std::vector<int> m_data;
public:
my(std::size_t n) : m_data(n) { }
// ...
};

现在您可以在本地传达所需的尺寸:

int main()
{
size_t n = get_data_from_user();
my x(n);
x.compute(); // etc.
}

关于c++ - C++中的静态成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7332616/

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