错误:在'&'标记之前预期';',','或')'

Ale*_*aro 3 c gcc token

    void cargarProducto (Producto &p)
{
    printf("\nIngrese el c¢diqo: ");
    scanf("%d", &p.codigo);
    fflush(stdin);
    printf("\nIngrese la descripci¢n: ");
    int i;
    printf("\nIngrese 1 si es importado");
    scanf("%d", &i);
    if(i == 1)
    {
        p.discriminante = IMPORTADO;
    }
    else
    {
        p.discriminante = LOCAL;
    }
    if(p.discriminante == IMPORTADO)
    {
        printf ("\nIngrese al origen:");
        scanf("%c", &p.origen);
    }
    else
    {
        printf ("\nIngrese el telefono");
        scanf ("%d", &p.impoExpo.telefono);
    }
}
Run Code Online (Sandbox Code Playgroud)

在行中,cargarProducto(Producto&p)抛出以下错误:错误:在'&'标记之前预期';',','或')'

void copiar (Producto &destino, Producto origen)
{
    destino.codigo=origen.codigo;
    destino.descripcion=origen.descripcion;
    destino.unidadMedida=origen.unidadMedida;
    destino.precio=origen.precio;
    destino.discriminante.origen.discriminante;
    if (destino.discriminante ==IMPORTADO)
    {
        destino.impoExpo.origen=origen.impoExpo.origen;
    }
    else
    {
        impoExpo.telefono=origen.impoExpo.telefono;
    }
}
Run Code Online (Sandbox Code Playgroud)

行无效copiar(Producto&destino,Producto origen)

Fid*_*its 6

如果您的意图是copiar直接修改destino,则必须传递地址destino.C中不存在通过引用传递

void copiar (Producto * const destino, const Producto * const origen)
{
    destino->codigo = origen->codigo;
    destino->descripcion = origen->descripcion;
    destino->unidadMedida = origen->unidadMedida;
    destino->precio = origen->precio;
    destino->discriminante = origen->discriminante;

    if(destino->discriminante == IMPORTADO)
        destino->impoExpo.origen = origen->impoExpo.origen;
    else
        impoExpo->telefono = origen->impoExpo.telefono;
}
Run Code Online (Sandbox Code Playgroud)

即使您不打算修改其内容,最好按地址传递结构.这是因为结构可能很大,如果不需要,您不希望将它们放在堆栈上.const在需要的地方声明结构.在上面的代码中,地址destino是常量,而不是数据; 因为origen,地址和数据都是不变的.