C++:错误:数组下标的类型“size_t{aka long unsigned int}[size_t{aka long
C++: error: invalid types ‘size_t {aka long unsigned int}[size_t {aka long unsigned int}]’ for array subscript
编译时出现以下错误:error: invalid types ‘size_t {aka long unsigned int}[size_t {aka long unsigned int}]’ for array subscript interactionMatrix[i][k]=interaction;
这是代码:
void Tree::computeInteractionScore(size_t* interactionMatrix){
size_t num_independent_variables = data->getNumCols() - no_split_variables->size();
for (size_t i = 0; i < num_independent_variables; ++i) {
for (size_t k = 0; i < num_independent_variables; ++k) {
size_t interaction = 0;
if(k!=i){
// interaction = computeInteraction(i,k);
}
interactionMatrix[i][k]=interaction;
}
}
}
interactionMatrix声明如下:
size_t num_independent_variables = data->getNumCols() - no_split_variables->size();
size_t interactionMatrix[num_independent_variables][num_independent_variables];
for (size_t i = 0; i < num_trees; ++i) {
trees[i]->computeInteractionScore(&interactionMatrix);
}
第一个问题是:
size_t interactionMatrix[num_independent_variables][num_independent_variables];
是VLA(可变长度数组),因为size_t
是非常数,所以它是非标准扩展,默认情况下在g++下启用。据我记忆所及,它还在堆栈上分配内存,所以如果数组太大,可能会导致堆栈溢出。我建议您将其更改为动态分配的数组(或者更好的是向量的向量)。例如
size_t **interactionMatrix;
interactionMatrix = new int*[num_independent_variables];
for (int i = 0; i < num_independent_variables; i++)
interactionMatrix[i] = new int[num_independent_variables];
那么您当前的函数参数类型将需要更改为CCD_ 3。但是,您需要编写自己的释放代码,并且为了安全起见,将std::unique_ptr与数组的自定义deleter一起使用。
最好切换到:
std::vector<std::vector<size_t>> interactionMatrix(num_independent_variables, std::vector<size_t>(num_independent_variables));
并相应地改变功能签名。
相关文章:
- 如何在 C 中正确使用 libiconv 使其不会报告"Arg list too long"?
- 不能在初始值设定项列表中将非常量表达式从类型 'int' 缩小到'unsigned long long'
- 在C++中使用GDAL可以将图像的像素坐标转换为lat,long吗
- <Windows>为什么 std::thread::native_handle 返回类型为"long long unsigned int"的值,而不是 void*(又名 HANDLE)?
- 错误:隐式转换更改符号:'int'到'unsigned long'
- 将 Vcl::Controls::TCaption aka (System::UnicodeString) 转换为 co
- 为什么 ## aka 令牌粘贴运算符不适用于 C 和 C++ 中的注释?
- 从"const void*"到"PVOID {aka void*}"[-fall
- 将"std::string {aka std::basic_string}"赋值中的不兼容类型<char>
- 这句话是什么意思 - " vector<long long> distance(n, std::numeric_limits<long long>::max()); "?
- C ++分割错误,为什么使用"long long"我没有得到答案?
- 对 '(const Y) (int&, std::mersenne_twister_engine<long unsigned int,
- 从 long 转换C++位集构造函数的复杂性是多少?
- 自动类型默认为 int 而不是 long
- 错误:从'void*'到'const uint8_t* {aka const unsigned char*}'的转换无效 [-允许]
- 错误:'class std::unique_ptr<std::set<long unsigned int> >'没有名为 'size' 的成员
- 错误:为"运算符 std::string {aka std::__cxx11::basic_string}"指定的返回类型<char>
- 错误:无法将'long unsigned int (A::*)()'转换为'poFunc {aka long unsigned int (*)()}'
- G++ 编译器:从 'pthread_t {aka long unsigned int}' 到 'void* (*)(void*)' 的转换无效 [-允许]
- C++:错误:数组下标的类型“size_t{aka long unsigned int}[size_t{aka long