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
声明为指针?它不需要,这就是为什么我没有将其声明为指针。