【问题标题】:error: invalid operands to binary expression错误:二进制表达式的操作数无效
【发布时间】:2016-11-25 19:45:37
【问题描述】:

我有一个我在这里初始化 = NULL 的结构:

void inicializa(tabelaHash **tabela, int tamanhoTabela) {
    int i;
    for(i = 0; i < tamanhoTabela; i++) {
        inicializaArvore(&tabela[i]);
    }

我的问题是,当我测试它是否有效时,在我提到的函数上使用“if(tabela[i] == NULL) ...”或任何其他需要“**tabela”的函数,它工作得很好,但是,当我在我的主服务器上执行此操作时,它会出现这个错误:

main.c:129:16: error: invalid operands to binary expression ('tabelaHash'
  (aka 'struct sbb') and 'void *')
            if(tabela[k] == NULL)
               ~~~~~~~~~ ^  ~~~~

得到这个错误的行只是:

    for (k = 0; k < tamanhoTabela; k++) {
    129->if(tabela[k] == NULL)
        printf("funcionou");
}

tabela是二叉树的哈希表,tabelaHash是struct sbb(sbb是一种二叉树,定义如下:

struct sbb {
tipoItem reg; //that is the information it holds
struct sbb *esq; // left pointer
struct sbb *dir; // right pointer
int esquipo; // if it is a vertical or horizontal pointer to the left
int dirtipo; // if it is a vertical or horizontal pointer to the right

};

我想要一个指向“tabela[i]”上每棵树的根的指针,所以我malloc'ed如下:

tabelaHash *tabela;
tabela = malloc(tamanhoTabela * sizeof(tabelaHash*));

如何测试我的 main 上的 tabela[i] 是否仍为 NULL?

编辑:我不知道这是否有任何帮助,但我刚刚意识到,如果函数需要“ tabelaHash **”。如果我调用“tabelaHash *”,它会得到同样的错误。

【问题讨论】:

  • 您已经给出了几个不相交的代码片段,它们并没有真正呈现您的问题的完整画面,实际上也没有呈现您的问题。我们通常更喜欢看到minimal reproducible example 演示问题并作为“我如何改进/修复/扩展这个”问题的上下文。这样你会得到更好的答案。
  • tabelaHash 是如何定义的?
  • ... sizeof(tabelaHash*) 很可能是错误的。应该是... sizeof(tabelaHash) 或者更好的... sizeof *tabela

标签: c hash binary-tree operands


【解决方案1】:

您的tabela 指针只是一个指针。因此,当您执行 tabela[k] 时,它会在表的“数组”中获得第 k 个 tabela。因此tabela[k] 的结果是tabelaHash,它不是指针,因此不能与NULL 进行原始比较。

您可能想改写tabelaHash **tabela;...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多