“;二进制表达式的操作数无效”;错误

“;二进制表达式的操作数无效”;错误,c,binary,expression,operands,C,Binary,Expression,Operands,我不断地发现这个错误: 二进制表达式('struct node'和'int'的操作数无效) 在下面我在函数“reachR”中用**标记的两行上。出了什么问题,我该如何解决?该代码用于数据结构赋值 #include <stdio.h> #include <stdlib.h> #define Vertex int #define maxV 10000 typedef struct digraph *Digraph; typedef struct node *teste; s

我不断地发现这个错误:

二进制表达式('struct node'和'int'的操作数无效)

在下面我在函数“reachR”中用**标记的两行上。出了什么问题,我该如何解决?该代码用于数据结构赋值

#include <stdio.h>
#include <stdlib.h>
#define Vertex int
#define maxV 10000

typedef struct digraph *Digraph;
typedef struct node *teste;
static int lbl[maxV];

typedef struct {
    Vertex v, w;
} Arc;

struct digraph {
    int V;
    int A;
    teste *adj;
};

struct node {
    Vertex w;
    teste next;
};


teste NEWnode( Vertex w, teste next) {
    teste a = malloc( sizeof (struct node));
    a->w = w;
    a->next = next;
    return a;
}

Arc ARC( Vertex v, Vertex w) {
    Arc a;
    a.v = v, a.w = w;
    return a;
}

void reachR( Digraph G, Vertex v) {
    Vertex w;
    lbl[v] = 1;
    for (w = 0; w < G->V; w++)
        **if (G->adj[v][w] == 1 && lbl[w] == 0)**
            reachR( G, w);
}

int DIGRAPHreach( Digraph G, Vertex s, Vertex t) {
    Vertex v;
    for (v = 0; v < G->V; v++)
        lbl[v] = 0;
    reachR( G, s);
    if (lbl[t] == 0) return 0;
    else return 1;
}

int digraphcycle( Digraph G) {
    Vertex v; teste a; int output;
    for (v = 0; v < G->V; v++)
        for (a = G->adj[v]; a != NULL; a = a->next) {
            output = DIGRAPHreach( G, a->w, v);
            if (output == 1) return 1;
        }
    return 0;
}

Digraph DIGRAPHinit( int V) {
    Vertex v;
    Digraph G = malloc( sizeof *G);
    G->V = V;
    G->A = 0;
    G->adj = malloc( V * sizeof (teste));
    for (v = 0; v < V; v++)
        G->adj[v] = NULL;
    return G;
}

void DIGRAPHinsertA( Digraph G, Vertex v, Vertex w) {
    teste a;
    for (a = G->adj[v]; a != NULL; a = a->next)
        if (a->w == w) return;
    G->adj[v] = NEWnode( w, G->adj[v]);
    G->A++;
}

int main (){
    Digraph G = DIGRAPHinit(4);
    DIGRAPHinsertA(G, 1, 2);
    DIGRAPHinsertA(G, 1, 3);
    DIGRAPHinsertA(G, 2, 3);
    DIGRAPHinsertA(G, 3, 4);
    if (digraphcycle(G)==1){ 
        printf("SIM!"); 
    } 
}
#包括
#包括
#定义顶点整数
#定义maxV 10000
typedef结构有向图*有向图;
typedef结构节点*teste;
静态整数lbl[maxV];
类型定义结构{
顶点v,w;
}弧;
结构有向图{
INTV;
INTA;
测试*adj;
};
结构节点{
顶点w;
下一步测试;
};
teste新节点(顶点w,teste下一个){
testea=malloc(sizeof(struct node));
a->w=w;
a->next=next;
返回a;
}
圆弧(顶点v,顶点w){
弧a;
a、 v=v,a.w=w;
返回a;
}
空洞到达(有向图G,顶点v){
顶点w;
lbl[v]=1;
对于(w=0;wV;w++)
**如果(G->adj[v][w]==1和&lbl[w]==0)**
reachR(G,w);
}
int有向图(有向图G,顶点s,顶点t){
顶点v;
对于(v=0;vv;v++)
lbl[v]=0;
reachR(G,s);
如果(lbl[t]==0)返回0;
否则返回1;
}
int有向图圈(有向图G){
顶点v;测试仪a;int输出;
对于(v=0;vv;v++)
对于(a=G->adj[v];a!=NULL;a=a->next){
输出=有向延伸(G,a->w,v);
如果(输出==1)返回1;
}
返回0;
}
有向图DIGRAPHinit(int V){
顶点v;
有向图G=malloc(sizeof*G);
G->V=V;
G->A=0;
G->adj=malloc(V*sizeof(teste));
对于(v=0;vadj[v]=NULL;
返回G;
}
空有向图插入图(有向图G,顶点v,顶点w){
睾丸a;
对于(a=G->adj[v];a!=NULL;a=a->next)
如果(a->w==w)返回;
G->adj[v]=NEWnode(w,G->adj[v]);
G->A++;
}
int main(){
有向图G=DIGRAPHinit(4);
有向插入图(G,1,2);
有向插入图(G,1,3);
有向插入图(G,2,3);
有向插入图(G,3,4);
如果(有向图循环(G)=1{
printf(“SIM!”);
} 
}

您试图将
结构
int
进行比较。显然是做不到的。equals运算符(
==
)是一个二进制运算符,两边都需要两个可比较的对象。
您可以通过执行

G->adj[v]->w

可能
G->adj[v][w]
应该是
G->adj[v]->w
我试着用你建议的替换,编译器说使用G->adj[v]->w是一样的吗?我没有注意到adj是指针数组,你应该使用
->
谢谢你的更正。我试图运行代码,但它在那一行给了我另一条错误消息。它说“线程1:EXC\u BAD\u访问(代码=1,地址=0x2)”并且它没有运行。你知道这意味着什么吗?这意味着你正在访问未分配的内存,使用调试器