c - “Invalid operands to binary expressions” 错误

标签 c binary expression operands

我不断收到此错误:

Invalid operands to binary expressions ('struct node'and '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!"); 
    } 
}

最佳答案

您正在尝试将 structint 进行比较。显然是做不到的。等于运算符 (==) 是一个二进制运算符,它的两侧需要两个可比较的对象。
您可以通过执行
来访问 Vertex 的值(int),如注释中提到的 G->adj[v]->w

关于c - “Invalid operands to binary expressions” 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35756285/

相关文章:

c - 如何将带有转义序列的字符串转换为C中的一个字符

C 盘 I/O - 在文件的相同偏移处读取后写入将使读取吞吐量非常低

c++将二进制文件写入文件

c# - 使用 Lambda 表达式调用通用方法(以及仅在运行时已知的类型)

javascript - 为什么叫函数表达式而不是函数声明呢?

objective-c - 调试statfs?

将字符串转换为十进制,在某些情况下不起作用?

c# - 为什么算术表达式没有针对 C# 中的 0 乘法进行优化

c - 是否有将整数转换为十六进制或二进制的 C 库?

python - django 二进制(无源代码)部署