gpt4 book ai didi

c - "error: subscripted value is neither array nor pointer nor vector"

转载 作者:太空宇宙 更新时间:2023-11-04 02:39:58 27 4
gpt4 key购买 nike

我正在编写一个应该为以下问题找到最佳答案的代码:

You have a vector of ints that you have to put in decrescent order by doing the "flip" operation, that is, given an i position in the vector of size n you should switch the values of i and n-1, the values of i+1 and n-2 and so on and so forth. The goal is to find and optimal way to put the vector in order, that is, with the minimal number of flips

我决定使用 A* 算法来寻找答案,因为找到最佳答案很重要,并且为了存储我需要的所有信息,我选择使用以下结构:

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

其中 v 将是解决方案的状态,flips 将存储我的选择,g 将保存 g 函数的值,h 将保存启发式的值。

为了编写程序,我创建了一个节点类型的 vector ,如下所示:

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

想法是使用节点 vector 的每个位置来存储一个状态,这样它就可以进行比较和扩展等等。在大多数情况下,编译器并没有提示太多,但在这些函数中:

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 语句中收到错误“错误:下标值既不是数组也不是指针也不是 vector ”和“警告:内置函数‘malloc’的不兼容隐式声明[默认启用]”在第一个 ma​​lloc 语句上发出警告,但奇怪的是在第二个语句上没有。同样的情况发生在另外几个类似的代码实例中,我怀疑警告可能只是我以错误的方式使用 ma​​lloc 因为我在其他地方收到了同样的警告,而实际上不应该一个问题,例如:

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

但最主要的是让结构 vector 工作,因为它显然是程序成功不可或缺的一部分。如果我猜的话,我想这与将 struct 用作​​ vector 有关,也许它不像我想的那样工作?不过我不知道。

附言我是巴西人,所以部分代码是用葡萄牙语编写的,主要是变量名和函数名,如有必要,我可以翻译它们。

最佳答案

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

关于c - "error: subscripted value is neither array nor pointer nor vector",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33059877/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com