2011-06-24 9 views
2

これはよくある質問ですが、私は再び答えを求めていません。警告:代入なしで整数からのポインタを代入する

私のように定義structersています

struct f_lock{ 
       int x; 
       struct f_lock *next; 
    }; 

は、その後、私は機能を持っていると言う:

私は別の関数から呼び出す
struct f_lock *new_node() 
{ 
    struct f_lock *new_f_lock; 
    ..... 
    return new_f_lock; 
} 

struct f_lock *new_f_lock; 
new_f_lock = new_node(); //This line gives the error warning:assignment makes pointer from integer without a cast 

は助けをgrateullだろう ありがとう

+4

あなたはたぶんスコープ内で 'new_node()'のプロトタイプを宣言していない可能性があります。つまり、人々が問題を再現するために使用できるコードを投稿することが望ましいと言われています。 –

+0

'f_lock * new_node()'でなく、 'f_lock * new_node()'でなくてはなりませんか? – Swift

+2

@Mike:Cでは、 'function'は予約されておらず、特別な意味を持ちません。元の定義は正しい。 'typedef'がなければ、型の名前は' struct f_lock'です。 'f_lock'自体は定義されていません – pmg

答えて

6

implicit declaration of function ‘new_node’もエラーが表示されましたか?その場合、おそらくあなたはそれを呼び出しているモジュールのnew_nodeを宣言するのを忘れていたでしょう。 (あなたがそのエラーを取得していない場合は、上でより多くの警告をオンにする-Wallで再コンパイル。)警告メッセージの

説明:new_nodeが適切に宣言されていない場合、コンパイラはそれが一種である、intを返すと仮定しますデフォルトの戻り値の型(歴史的理由から)

+0

Iエラーは表示されませんが、そうかもしれません。私は同じモジュールの中で関数を持っていません。 –

+1

@Juggler:コンパイラの警告を最大限にすることは、ほとんどの場合、良い考えです。 –

+0

GCCマニュアルの '-Werror'も参照して、あなたの利点にそれを使用してください。 –

1

私はパラメータなしの関数に対してC(C++ではなく)に必要とされるvoidを取るとしての機能を宣言するために忘れていたかつてこの(かなり誤解を招く)エラーメッセージ取得覚えているようだ:

struct f_lock *new_node() 
{ 
    struct f_lock *new_f_lock; 
    ..... 
    return new_f_lock; 
} 

する必要があります:

struct f_lock *new_node(void) 
{ 
    struct f_lock *new_f_lock; 
    ..... 
    return new_f_lock; 
} 
+0

これは古い答えですが、私の謎を解決しました –

関連する問題