簡體   English   中英

警告:從不兼容的指針類型 [-Wincompatible-pointer-types]| 傳遞 'transform_labels' 的參數 2 |

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM