簡體   English   中英

“錯誤:下標值既不是數組,也不是指針,也不是矢量”

[英]“error: subscripted value is neither array nor pointer nor vector”

我正在編寫某種東西,應該找到以下問題的最佳答案:

您有一個整數向量,必須通過執行“翻轉”操作以降序排列,即,給定大小為n的向量中的i位置,您應該切換i和n-1的值, i + 1和n-2,依此類推。 目標是找到一種最佳的方式來按順序排列矢量,即以最少的翻轉次數

我決定使用A *算法來找到答案,因為找到最佳答案並存儲所需的所有信息非常重要,因此我選擇使用以下結構:

typedef struct{
            int *v, *flips,g, h;
} node;

其中v是解決方案的狀態,翻轉將存儲我的選擇,g將保存g函數的值,h則是啟發式方法的值。

因此,編寫程序時,我制作了一個類型為node的向量,如下所示:

estados=malloc(n*sizeof(node));

想法是使用節點向量的每個位置來存儲狀態,以便可以對其進行比較和擴展等。在大多數情況下,編譯器並沒有抱怨很多,但在這些函數中:

int funcaoh(node estados,int n,int goal[], int pos){
    int cont=0, i;
    for(i=0;i<n;i++){
        if(estados[pos].v[i]!=goal[i]){
            cont++;
        }
    }
    return (cont/2);
}

void criaNode(node x[], int n, int pos){
    int i;
    x[pos].v =malloc(n*sizeof(int));
    x[pos].flips =malloc(n*sizeof(int));
    for(i=0;i<n;i++){
        x[pos].flips[i]=-1;
        x[pos].v[i]=-1;
    }
    x[pos].h=0;
    x[pos].g=0;
    return;
}

我在funcaoh函數的if語句中收到錯誤“錯誤:下標值既不是數組,也不是指針,也不是向量”,並且在警告中顯示了“警告:內置函數'malloc'[默認啟用]的不兼容隱式聲明”第一個malloc語句,但在第二個語句上還不夠奇怪。 在其他一些類似的代碼實例中也會發生同樣的情況,我懷疑warnig可能只是我以錯誤的方式使用了malloc ,因為我在其他地方也得到了同樣的警告,但實際上這不是問題,例如:

 entrada=malloc(n * sizeof(int));

但是最主要的是使結構向量正常工作,因為它顯然對程序成功至關重要。 如果我猜到了,我想它與使用struct作為向量有關,也許它不像我認為的那樣起作用? 不過我不知道。

PS我是巴西人,所以代碼的某些部分是用葡萄牙語編寫的,大部分只是變量和函數的名稱,如有必要,我可以翻譯它們。

funcaoh()

int funcaoh(node estados,int n,int goal[], int pos){

estados是一個簡單的結構,而不是指向結構的指針,因此您不能對它進行下標,等等。 我必須同意。

您大概需要其中之一(它們是等效的):

int funcaoh(node *estados, int n, int goal[], int pos) { … }

int funcaoh(node estados[], int n, int goal[], int pos) { … }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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