我见过这个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
在编译时是固定的。
答案 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容器吗?