【问题标题】:differs in levels of indirection from 'int ()' (C)与 'int ()' (C) 的间接级别不同
【发布时间】:2012-06-23 04:23:34
【问题描述】:

这段代码给了我这个错误,我不明白。我什至无法运行程序。你能帮我解决这个错误吗?如果你对代码中的任何内容不理解,请说出来。

error C2040: 'CancelarPedido' : 'ppedido (ppedido)' 与 'int ()' 的间接级别不同

printf("\nIntroduza opcao:");
    scanf("%d",&opc);

    switch(opc){
        case 1: lista = NovoPedido(lista);break;
        case 2: lista = CancelarPedido(lista);break;
        case 3: printf("Falta implementar a funcao.");break;
        case 4: printf("Falta implementar a funcao.");break;
    }
    }while(opc!=5);

    return lista;
}


ppedido CancelarPedido(ppedido lista)
{
    ppedido actual, anterior = NULL;

    char id[5];

    actual = lista;

    if(lista == NULL)
        printf("\nNao ha pedidos na fila de espera...");
    else
    {
        printf("\nIntroduza o ID do pedido que pretende cancelar: ");
        scanf("%s", id);

        while(actual != NULL && ((strcmp(actual->id, id)) != 0)){
            anterior = actual;
            actual = actual->prox;
        }
        if(actual == NULL){
            printf("\nERRO - Nao existe nenhum pedido com o ID introduzido.");
            return lista;
        }
        if(anterior == NULL){
            lista = actual->prox;
            printf("\nPedido cancelado com sucesso...");
        }
        else{
            anterior->prox = actual->prox;
            printf("\nPedido cancelado com sucesso...");
        }
        free(actual);
        return lista;
    }
}

【问题讨论】:

  • pedido 是一个列表类型,如果这就是你的意思的话。
  • 声明返回的第一段代码是什么数据类型?
  • typedef struct pedido pedido, *pedido;结构 pedido{ char id[5];优先; int 台面,n_pratos;结构普拉托*普拉托[TAM]; pedido prox; };结构 prato{ char id[5]; };
  • 如果没有SSCCE,很难正确回答。
  • 我回答没有任何困难。

标签: c


【解决方案1】:

您在声明之前调用了 CancelarPedido。您需要重新排序代码或为 CancelarPedido 添加前向声明。

如果没有在范围内声明 CancelarPedido,它默认为 int CancelarPedido()。您会收到错误消息,因为 lista 被声明为指针,但 CancelarPedido 被声明为返回 int。

【讨论】:

  • 可以在代码前面预先声明,我们只有代码片段。说到这个,如果我们看到更多的代码会更容易提供帮助。
  • @Nit 嗯,如果它是预先声明的,那么我们就不会看到该错误消息。
  • 就是这样,吉姆。谢谢,很有帮助。
  • 那么我该如何声明才能返回一个列表呢?再次感谢。
  • 我不清楚你的问题。您已将 CancelarPedido 声明为返回 pedido,这就是您的 lista 的声明方式,对吗?所以唯一的问题是,当你调用它时,范围内没有 CancelarPedido 的声明。您可以将ppedido CancelarPedido(ppedido lista); 添加到您的头文件中。
猜你喜欢
  • 2019-06-13
  • 1970-01-01
  • 2020-04-07
  • 1970-01-01
  • 2013-02-18
  • 2015-06-22
  • 1970-01-01
  • 2019-06-21
  • 2020-01-05
相关资源
最近更新 更多