在队列下面的不正确的代码中,我试图让结构'bar'保存一个长度为ARR_SIZE
的数组。我希望这个变量取决于我在构造过程中给出的参数
所以在一个实例中,当我构造一个foo
时,我希望结构中的数组长度为8
,或者在另一种情况下,我想使它成为1000
的数组。怎么办呢?
我知道您可以将ARR_SIZE
设为static
变量,但这并不意味着数组foo
的每个实例的数组大小相同吗?
有没有办法让这个参数对foo
的每个实例都不同?
class foo
{
private:
int ARR_SIZE;
public:
foo();
foo(int arr_size);
~foo();
struct bar {
int arrInt[ARR_SIZE];
bar* next;
};
void enqueue(int a);
int dequeue();
};
foo::foo()
{
ARR_SIZE = 8;
}
foo::foo(int arr_size)
{
ARR_SIZE = arr_size;
}
答案 0 :(得分:1)
原始数组在C ++中无法在运行时更改其大小。这就是std::vector
类在c ++标准库中的用法。
将班级更改为
class foo
{
public:
foo() : arr_size_(8) {}
foo(size_t arr_size) : arr_size_(arr_size) {}
~foo();
struct bar {
std::vector<int> arrInt; // <<< use std::vector
bar* next;
};
void enqueue(int a);
int dequeue();
private:
size_t arr_size_;
};
现在,只要您需要实例化一个新的bar
对象,就可以编写
void foo::enqueue(int a) {
bar b{ arrInt(arr_size_), nullptr };
// or
bar* b = new bar{ arrInt(arr_size_), nullptr };
// ...
}