C - "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是解的一种状态,flipps存储我的选择,g保存g函数的值,h保存启发式的值。

因此,为了编写程序,我创建了一个类型为节点的向量,如:
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;
}

我得到错误"错误:下标值既不是数组也不是指针也不是向量"在funccaoh函数的if语句和"警告:内置函数'malloc'的不兼容的隐式声明[默认启用]"警告在第一个malloc语句,但没有在第二个奇怪的足够。在其他几个类似的代码实例中也发生了同样的情况,我怀疑警告可能只是我以错误的方式使用了malloc,因为我在其他地方得到了相同的警告,这实际上不应该是一个问题,例如:

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

但是最重要的是让struct vector工作起来,因为它显然是程序成功不可或缺的一部分。如果我猜,我想这与struct作为向量的使用有关,也许它不像我想象的那样工作?不过我不知道。

注:我是巴西人,所以有些代码是用葡萄牙语写的,主要是变量名和函数名,如果需要的话,我可以翻译它们。

In 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) { … }

最新更新