C 11:阵列绑定不是一个令牌之前的整数常数



我已经看到了这个问题,但是提供的解决方案无法解决问题。

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在编译时间固定。

通过阅读配置文件

获得值num_instances

...配置文件在运行时

读取

这意味着 num_instances actiable ,其值是按运行时间确定的

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

不,这不是,你在矛盾自己。

如果在运行时从配置加载,则在编译时不知道。如果在编译时已知,您将不会在运行时从配置中加载它。


如果您无法在编译时修复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);
}

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

改用static const int。这有效:

static const int num_instances = 5;

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

即使值固定,它也不是编译时间常数,如果您想要动态尺寸的容器,我建议您使用stl容器?

相关内容

最新更新