2016-10-20 18 views
0

を入力するために戻ったときに、私は次のように私のプログラムがあり、いくつかのタイプの構造を更新するためのプログラムを作ったが、2つのエラーをコンパイルするに発生しました:エラー:互換性のない型に割り当てると

#include <stdio.h> 

struct a { 
    char *name; 
    int id; 
    char *department; 
    int num; 
}; 

typedef struct a ab; 

void swap(ab *,ab *); 
ab * update(ab *); 

int main(int argc,char *argv[]) 
{ 
    ab array[2]={{"Saud",137,"Electronics",500},{"Ebad",111,"Telecom",570}}; 
    ab *q; 

    *q=update(&array[0]); 
} 

ab * update(ab *p) 
{ 
    p->name="Talha"; 
    p->id=234; 
    p->department="Civil"; 
    p->num=567; 

    return *p; 
} 

コンパイルするには、2つのエラーが登場しましたポインタを代入して返します。親切に私の間違いを知らせ、それを訂正してください。エラーがreturn *p;に*を削除し、

newproject.c: In function ‘main’: 

newproject.c:29:4: error: incompatible types when assigning to type ‘ab {aka 
struct a}’ from type ‘ab * {aka struct a *}’ 

*q=update(&array[0]); 

^

newproject.c: In function ‘update’: 

newproject.c:56:9: error: incompatible types when returning type ‘ab {aka 
struct a}’ but ‘ab * {aka struct a *}’ was expected 

return *p; 

    ^
+3

LHSとRHSの型を整理するだけで問題なく動くはずです。 '* q = update(&array [0]);': 'update'は' ab * 'を返すように定義されていますが' * q'は 'ab'型です。 'q'が未実装であることは言うまでもなく、逆参照すると無効なメモリアクセスが発生します。 – kaylum

+0

'q'は、逆参照される前に信頼できる場所を指すように初期化されていないことに注意してください。それは幸福のためのレシピではありません。 –

答えて

0
関連する問題