我已经看到了这个问题,但是提供的解决方案无法解决问题。
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容器?