繁体   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