2

#importを使用すると、ビルドごとに1回だけファイルがインポートされるという印象を受けましたが、ヘッダーで変数を定義しようとした後、そのヘッダーを2つの異なるソースファイルにインポートすると、変数のシンボルリンカーリンカーエラーが重複します。これはどのように可能ですか?

4

3 に答える 3

6

#importビルドごとではなく、ファイルごとに 1 回ヘッダーが含まれるようにします。したがって、変数はヘッダーをインポートするすべてのファイルで定義され、グローバル変数はプロジェクト全体でデフォルトで表示されるため、リンカーエラーが発生します。
グローバル変数を定義する正しい方法 (やりたい場合) は、実装ファイルで定義し、他のファイルでキーワード external を使用して参照することです。
また、ヘッダーの変数を静的として定義すると、その可視性が単一のファイルに制限されるため、エラーは発生しませんが、必要な結果にはならない可能性があります;)

于 2009-12-15T15:38:49.273 に答える
2

#import「宣言」が1回だけ含まれるようにします。「定義」である変数を定義しているため、重複シンボルリンカーエラーが発生します。

このエラーを解決するには、宣言のみに .h を使用し、定義に .m を使用します。

ウラジミールが説明したように、 extern を使用できます

于 2009-12-16T04:28:14.920 に答える