c ++ 11:数组绑定在标记

时间:2017-12-06 15:17:21

标签: c++11 vector

我见过这个question,但那里提供的解决方案并没有解决问题。

static int num_instances; 
std::vector<SomeClass::FunctionWithinTheClass> *mem[num_instances];

SomeClass::FunctionWithinTheClass *mem[num_instances]; //即使这会引发错误

通过读取配置文件获得值num_instances

我得到的错误是: array bound is not an integer constant before ‘]’ token

这很奇怪,因为值num_instances在编译时是固定的。

3 个答案:

答案 0 :(得分:1)

也许它在编译时是固定的,但“整数常量”是一个技术术语,static int变量不符合这些要求。

请改用static const int。这有效:

static const int num_instances = 5;

但是,你提到从配置文件中读取num_instances ...这对我来说听起来不像常数。在这种情况下,您必须使用std::vector或其他动态大小的数组。

答案 1 :(得分:1)

  

通过读取配置文件

获取值num_instances

  

...在运行时读取配置文件

这意味着num_instances变量,其值在运行时确定。

  

这很奇怪,因为值num_instances在编译时是固定的

不,不,你自相矛盾。

如果它在运行时从config加载,则在编译时不知道。如果在编译时知道它,则不会在运行时从config加载它。

如果在编译时无法修复num_instances,则使用数组是错误的。只需将其更改为

即可
// like an array whose size can be set at runtime ...
std::vector<std::vector<SomeClass::FunctionWithinTheClass>> mem;

void configure() {
    size_t num_instances = loadNumInstancesFromConfig();
    mem.resize(num_instances);
}

答案 2 :(得分:0)

即使值是固定的,它也不是编译时常量,如果你想要动态大小的容器,我建议你使用stl容器吗?