警告:正在传递'的参数2;转换标签';来自不兼容的指针类型[-Wincompatible指针类型]|
我的编译器给了我这个警告:传递来自不兼容指针类型[-Wincompatible指针类型]的“transform_labels”的参数2,注意:应为“int(*)[10]”,但参数类型为“int**” 我的代码:警告:正在传递'的参数2;转换标签';来自不兼容的指针类型[-Wincompatible指针类型]|,c,arrays,pointers,multidimensional-array,C,Arrays,Pointers,Multidimensional Array,我的编译器给了我这个警告:传递来自不兼容指针类型[-Wincompatible指针类型]的“transform_labels”的参数2,注意:应为“int(*)[10]”,但参数类型为“int**” 我的代码: void transform_labels(int array[60000], int labels[60000][10], int NPAT){ for(int i = 0; i < NPAT; i++){ int aux = array[i];
void transform_labels(int array[60000], int labels[60000][10], int NPAT){
for(int i = 0; i < NPAT; i++){
int aux = array[i];
labels[i][aux] = 1;
printf("%d\n ",*labels[i]);
if ((i+1) % 10 == 0) putchar('>');
}
}
int main() {
load_mnist();
int loop;
int** labels;
allocate_mem(&labels, 60000, 10);
printf("HERE");
transform_labels(train_label, labels, 60000);
return 0;
}
void transform_标签(int数组[60000],int标签[60000][10],int-NPAT){
对于(int i=0;i');
}
}
int main(){
load_mnist();
内环;
int**标签;
分配_mem(和标签,60000,10);
printf(“此处”);
转换标签(列车标签,标签,60000);
返回0;
}
指向指针的指针不能转换为指向数组的指针。而数组可以转换为只应用于多维数组最外层维度的指针
您需要更改函数的声明:
void transform_labels(int *array, int **labels, int NPAT){
指向指针的指针不能转换为指向数组的指针。而数组可以转换为只应用于多维数组最外层维度的指针 您需要更改函数的声明:
void transform_labels(int *array, int **labels, int NPAT){
允许传递指针而不是函数参数的第一个维度,反之亦然,但所有其他维度必须匹配。你有一个第二维度[10] 您可以向它传递一个指向大小为10的数组的指针,但这可能会将问题推到代码中的另一个点,例如分配函数。应编译以下内容,但不清楚这是否是您想要的:
typedef int LabelSub[10];
LabelSub* labels;
allocate_mem(&labels, 60000, 10);
允许传递指针而不是函数参数的第一个维度,反之亦然,但所有其他维度必须匹配。你有一个第二维度[10] 您可以向它传递一个指向大小为10的数组的指针,但这可能会将问题推到代码中的另一个点,例如分配函数。应编译以下内容,但不清楚这是否是您想要的:
typedef int LabelSub[10];
LabelSub* labels;
allocate_mem(&labels, 60000, 10);
在typedef后面隐藏数组通常和在typedef后面隐藏指针一样糟糕。相反,只需执行
int标签[60000][10]
。此外,您对这段代码所做的只是将不兼容的指针类型错误移动到allocate\u mem
@Lundin。typedef的作用不是“隐藏”它,而是使它可写。我发现混合指针和数组的语法几乎不可读。是的,它将取决于分配函数实际返回的类型。这是代码中的“其他”点。在typedefs后面隐藏数组通常和在typedefs后面隐藏指针一样糟糕。相反,只需执行int标签[60000][10]
。此外,您对这段代码所做的只是将不兼容的指针类型错误移动到allocate\u mem
@Lundin。typedef的作用不是“隐藏”它,而是使它可写。我发现混合指针和数组的语法几乎不可读。是的,它将取决于分配函数实际返回的类型。这是代码中的“其他”点。以前已多次询问此问题。问题是int**
,它与数组无关。可能会有帮助。这已经被问过很多次了。问题是int**
,它与数组无关。可能会有帮助。