2009-03-14 26 views
1

私はセマフォの使用を含む学校向けのプロジェクトを完了しようとしています。私は適切なヘッダファイル(pthreadのためのもの)を加えました。私は適切なライブラリにもコンパイラを指摘しました。これはCで書かれています。はい、これは割り当てですが、私は実装の助けを求めているわけではないことを知っておいてください。むしろ、このひどいコンパイルエラーを理解できないようです。ここでCプログラムをコンパイルするときにエラーが発生する

は、セマフォの「シンプル」宣言している私のコードの50を介してライン47、であり、それらを初期化:

sem_t empty; 
sem_init(&empty, 0, 5); 
sem_t full; 
sem_init(&full, 0, 0); 
ここ

私が試してみて、ライン48用にコンパイルするとき、私は取得していますメッセージです。私はライン50のための同じセットを取得しますが、簡潔にするためにそれを投稿しませんでした:

|48|error: expected declaration specifiers or ‘...’ before ‘&’ token| 
|48|error: expected declaration specifiers or ‘...’ before numeric constant| 
|48|error: expected declaration specifiers or ‘...’ before numeric constant| 
|48|warning: data definition has no type or storage class| 
|48|warning: type defaults to ‘int’ in declaration of ‘sem_init’| 

私はmain()関数の外に、これらすべてを宣言しました。これらのエラーを解決するにはどうすればよいですか?私はsem_tのデータ型を示していないようだが、私が含まれているsemaphore.hで定義されているのでうんざりです。私はgccを使っているUbuntuの下でCode :: Blocksを使ってこれをコンパイルしています。このエラーは、コマンドラインからコンパイルしても発生します。

ご協力いただきありがとうございます。

答えて

15

あなたの問題はscopingと関連している可能性があります。

私はあなたが右の宣言の後に関数を呼び出す見ることができるので、

が不審に聞こえる「私は main()関数の外に、これらすべてを宣言しています」。

は、あなたが(事実上のグローバル変数を作成、すなわちメインの外に)ファイルスコープで物事を宣言することができますmain

sem_initへの呼び出しを移動してみてくださいしかし、あなたは、ファイルでの関数(sem_initなど)を呼び出すことはできません範囲。関数スコープでコールする必要があります(例:main()の内部)

+1

これはおそらく答えです。ファンクションコールはファイルスコープに置くことはできません。ファンクションコールは別のファンクション内にある必要があります。 –

+0

と、正しいライブラリにリンクすることを忘れないでください。... -lrt here – Ben

+0

@Andrew:いいコールです。私はあなたのコメントの側面を含めるために私の答えを修正しました。 –

関連する問題