C++11 c++;11:数组绑定不是标记前的整数常量

C++11 c++;11:数组绑定不是标记前的整数常量,c++11,vector,C++11,Vector,我已经看到了这一点,但提供的解决方案并不能解决问题 static int num_instances; std::vector<SomeClass::FunctionWithinTheClass> *mem[num_instances]; 静态int num_实例; std::vector*mem[num_实例]; SomeClass::FunctionWithinTheClass*mem[num_实例]//即使这样也会引发错误 值num\u instances通过读取配置文件

我已经看到了这一点,但提供的解决方案并不能解决问题

static int num_instances; 
std::vector<SomeClass::FunctionWithinTheClass> *mem[num_instances];
静态int num_实例;
std::vector*mem[num_实例];
SomeClass::FunctionWithinTheClass*mem[num_实例]//即使这样也会引发错误

num\u instances
通过读取配置文件获得

我得到的错误是:
数组绑定不是']'标记前面的整数常量


这很奇怪,因为值
num\u instances
在编译时是固定的。

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

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

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

改用
静态常量int
。这项工作:

static const int num_instances = 5;

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

也许它在编译时是固定的,但“整型常量”是一个技术术语,
静态int
变量不满足这些要求

改用
静态常量int
。这项工作:

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

num\u instances
通过读取配置文件获得

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

这意味着
num\u instances
是一个变量,其值在运行时确定

这很奇怪,因为值
num\u instances
在编译时是固定的

不,不是,你在自相矛盾

如果它是在运行时从配置加载的,那么在编译时它是未知的。如果在编译时知道它,您就不会在运行时从配置中加载它


如果无法在编译时修复
num_实例
,则使用数组是错误的。把它改成

// 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);
}
//就像一个可以在运行时设置大小的数组。。。
std::向量mem;
void configure(){
size_t num_instances=loadNumInstancesFromConfig();
mem.resize(num_实例);
}
num\u instances
通过读取配置文件获得

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

这意味着
num\u instances
是一个变量,其值在运行时确定

这很奇怪,因为值
num\u instances
在编译时是固定的

不,不是,你在自相矛盾

如果它是在运行时从配置加载的,那么在编译时它是未知的。如果在编译时知道它,您就不会在运行时从配置中加载它


如果无法在编译时修复
num_实例
,则使用数组是错误的。把它改成

// 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);
}
//就像一个可以在运行时设置大小的数组。。。
std::向量mem;
void configure(){
size_t num_instances=loadNumInstancesFromConfig();
mem.resize(num_实例);
}

您正在编译时读取配置文件?不,配置文件是在运行时读取的。然后在运行时确定值,不是吗?这是正确的。然后,我需要了解问题是什么问题是该值必须是编译时常量。因此,在编译时知道。您在编译时读取配置文件?不,配置文件在运行时读取。然后在运行时确定值,不是吗?这是正确的。然后,我需要了解问题是什么问题是该值必须是编译时常量。因此在编译时就知道了。为什么它是std::vector?我说它试图实现什么?什么才有意义?当您匹配模板参数列表周围的
括号时,它是如何读取的?我重新阅读了它并更好地理解了它,这导致了一个新错误:
请求在…中调整成员大小,这是指针类型(也许你想用->
你还是把
mem
声明为指针吗?它不需要,这就是为什么我没有声明它为指针。为什么它是
std::vector我说它试图实现什么?有什么意义?当你匹配模板参数列表周围的
括号时,它是如何读取的?我重新读了一遍并且更好地理解了它,这导致了一个新的错误:
request for member resize in…,它是指针类型的(可能您打算使用->
您是否仍然将
mem
声明为指针?它不需要,这就是为什么我没有将其声明为指针。