[英]warning: passing argument 2 of ‘accept’ from incompatible pointer type [-Wincompatible-pointer-types]
[英]Warning: passing argument 2 of 'transform_labels' from incompatible pointer type [-Wincompatible-pointer-types]|
我的編譯器給了我這個警告:從不兼容的指針類型 [-Wincompatible-pointer-types] 中傳遞 '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];
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_labels(int *array, int **labels, int NPAT){
您可以傳遞指針而不是函數參數的第一個維度,反之亦然,但所有其他維度必須匹配。 你有第二個維度 [10]。
您可以將一個指向大小為 10 的數組的指針傳遞給它,但這可能只會將您的問題推到代碼中的另一點,例如您的分配函數。 以下應該編譯,但不清楚這是否是您想要的:
typedef int LabelSub[10];
LabelSub* labels;
allocate_mem(&labels, 60000, 10);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.