2017-04-14 15 views
2

これはエラーです:不完全な型へのポインタを参照解除する - 関数へのポインタを使って構造体への値の割り当て

str.c: In function ‘values’: str.c:15:3: error: dereferencing pointer to incomplete type ‘struct inv’ 
    t -> a = &w; 

そして、これはコードです:

#include<stdio.h> 

void values(struct inv *t, int , float); 

void main() 
{ 
    struct inv { 
     int a; 
     float *p; 
    } ptr; 
    int z = 10; 
    float x = 67.67; 
    values(&ptr, z, x); 
    printf("%d\n%.2f\n", ptr.a, *ptr.p); 
} 

void values(struct inv *t, int w , float b) { 
    t -> a = &w; /* I am getting error here, not able to assign value 
        using the arrow operator */ 
    t -> p = &b; 
} 
+0

@dbush:スクロールバーを使用せずにエラー全体を読み取ることができますか? – jxh

答えて

2

あなたのmainの内側struct invを定義し関数。その結果、mainの外側には表示されません。これは、関数valuesの宣言で言及されたstruct invが別の構造体であり、まだ完全に定義されていない構造体であることを意味します。そのため、「不完全な型」のエラーが発生しています。

定義を関数外に移動する必要があります。

また、t->aのタイプはintですが、int *とします。ここでアドレス演算子を取り除き、wの値を直接代入します。

#include<stdio.h> 

struct inv { 
    int a; 
    float *p; 
}; 

void values(struct inv *t, int , float); 

void main() 
{ 
    struct inv ptr; 
    int z = 10; 
    float x = 67.67; 
    values(&ptr, z, x); 
    printf("%d\n%.2f\n", ptr.a, *ptr.p); 
} 

void values(struct inv *t, int w , float b) { 
    t -> a = w; 
    t -> p = &b; 
} 
+0

ファイルスコープで宣言されていないにもかかわらず実際に関数のスコープをその関数に限定しているときに、関数のパラメータに 'struct'を宣言することについて言及したいことがあります。 – jxh

+0

@jxh良い点。編集されました。 – dbush

+0

参照:http://ideone.com/gXn0aH – jxh

関連する問題