Передача массива структур для работы в C - PullRequest
0 голосов
/ 07 августа 2011
struct mystruct_type {
    int a;    
    int b;        
};      
typedef struct  mystruct_type mystruct;    

void function1    
{    
    mystruct place[N],*temp1,*temp2,*temp3;    
    temp1= malloc(sizeof(mystruct));    
    temp2= malloc(sizeof(mystruct));    

    temp1->a=3; temp1->b=4;        

    assign(temp2,temp1);      
    temp3=add(place,place+2);//Want to add mystruct[0]+mystruct[2],2+4,4+6....loop not   shown here       
}      

void assign (mystruct * m1,mystruct * m2)//Gives warning conflicting types for assign        
{       
    m1->a=m2->a;        
    m1->b=m2->b;     
}     

mystruct * add (mystruct * m1, mystruct * m2)//Error: Conflicting types for add     
{  
    complex * c;     
    c=malloc(sizeof(mystruct));       
    c->a=m1->a+m2->a;      
    c->b=m1->b+m2->b;       
    return c;    
}

Кто-нибудь может указать, в чем ошибка?
Спасибо ....

Ответы [ 2 ]

1 голос
/ 07 августа 2011

Конфликтующий тип для добавления связан с тем, что вы возвращаете указатель на сложную структуру вместо указателя mystruct.

Как упоминал Крис, вам нужно либо поместить функции add и назначить над function1, либо объявить их как

void assign(mystruct *, mystruct*);
mystruct *add(mystruct *, mystruct *);

вверху вашего файла.

0 голосов
/ 07 августа 2011

Вы должны выделить память просто и правильно, как:

typedef struct {
    int a;    
    int b;        
} mystruct;    

mystruct *initialize(size_t numElem)    
{    
    return calloc(numElem,sizeof(mystruct));    
}      

void assign (mystruct * m1,mystruct * m2)
{       
    *m1=*m2;     
}     

mystruct * add (mystruct * m1, mystruct * m2, mystruct *sum)
{  
    sum->a=m1->a+m2->a;      
    sum->b=m1->b+m2->b;       
    return sum;    
}

...
mystruct sum ={3,4} , *x = initialize(10);
assign( &x[0], &sum );
assign( &x[1], &x[0] );
add( &x[0], &x[1], &sum );
printf(" %d %d ", sum.a, sum.b );
...
free( x );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...