【问题标题】:using struct array as parameter in c++在 C++ 中使用结构数组作为参数
【发布时间】:2015-09-23 01:46:06
【问题描述】:

我在构建这个时遇到了问题:

#include <stdio.h>
#include <conio.h>
#define N 3

struct cliente
{
    char nocliente[12];
    int edad;
    int precio;        
};

void imprimir(cliente *cliente1[N]);

int main()
{
    struct cliente cliente1[N];
    for(int i=0; i<N; i++)
    {
        printf("\nIngrese el nombre del cliente %d\n", i+1);
        scanf("%s", &cliente1[i].nocliente);
        printf("\nIngrese la edad del cliente %d\n", i+1);
        scanf("%d", &cliente1[i].edad);
        printf("\nIngrese el precio del articulo del cliente %d\n",  i+1);
        scanf("%d\n", &cliente1[i].precio);
    }

    imprimir(&cliente1[N]);

    getch();
    return 0;
}

void imprimir(cliente *cliente1[N])
{
    for(int i=0; i<N; i++)
    { 
        printf("%s", cliente1[i]->nocliente);
        printf("\n%d", cliente1[i]->edad);
        printf("\n%d", cliente1[i]->precio);
    }
}

这是编译器输出的错误:

cannot convert `cliente*` to `cliente**` for argument `1` to `void imprimir(cliente**)`

我已经尝试在原型和定义的参数中声明(cliente *cliente[]),但该函数也不起作用

【问题讨论】:

  • imprimir 的参数应该是cliente client1[],并在适当的范围内调整其使用。它应该从main 调用,只需imprimir(cliente1);。也许在您的文本/教程中花更多时间了解数组、指针、它们的相似之处和不同之处,可能会有所帮助。
  • 然后这不是 c++ 。请将其标记为“C”
  • @Jagannath 在这段代码中有 一个 的东西需要 C++ 编译:struct cliente { ... };,然后使用类型 cliente 没有保留字 struct 和没有正式的 typedef 到 cliente 将无法使用 C 进行编译。
  • @Whozcraig 哦,没有意识到。那么它就是一个完美的 C++ 代码 :)

标签: c++ function pointers struct parameters


【解决方案1】:

请改用以下内容:

void imprimir(cliente *cliente1)

用于您的函数声明。

【讨论】:

    【解决方案2】:

    对...进行更改

    imprimir(&cliente1);//you are passing the whole thing not just #3
    
    
    void imprimir(cliente *cliente1) //drop the N
    

    【讨论】:

      【解决方案3】:
      • 正确(但令人困惑)的语法是

        void imprimir(/* const */ cliente (&cliente1)[N]);
        

        然后调用它

        imprimir(cliente1);
        
      • 更简单的语法:

        void imprimir(/* const */ cliente *cliente1, std::size_t size);
        

        打电话

        imprimir(cliente1, N);
        
      • 使用std::vectorstd::array 可能会有所帮助

        std::array<cliente, N> cliente1;
        imprimir(/* const */ std::array<cliente, N>& cliente1);
        

        然后叫它

        imprimir(cliente1);
        

      注意:我在注释中添加了const,因为数组没有被修改。

      【讨论】:

        猜你喜欢
        • 2021-03-17
        • 1970-01-01
        • 1970-01-01
        • 2012-12-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-09-17
        相关资源
        最近更新 更多