2

グローバル C 変数を宣言して初期化しようとしています。

const int numberOfTickMarks = 6;
const double tickValues[numberOfTickMarks] = {500, 2000, 3000, 4000, 6000, 8000};

ヘッダー ファイル (の前@interface) でこれを行うと、リンカ エラーが発生します。しかし、.mファイルでこれを行うと(の前に@implementation)、期待どおりに動作するようです。

後者は、C/Objective-C のグローバル定数を宣言する方法として受け入れられていますか?

4

3 に答える 3

1

「マジックナンバー」がある場合に私がすることは次の#defineとおりです。

#define NUM_TICK_MARKS 6

.mファイルに入れることもできますが、広く共有する場合は、 .pchファイルに入れるかもしれません。

ところで

numberOfTickMarks必要ありません:

const double tickValues[numberOfTickMarks] = {500, 2000, 3000, 4000, 6000, 8000};

イニシャライザは、配列の大きさを非常に明確に示しています!

于 2013-05-08T18:22:14.307 に答える
1

グローバル変数は、ヘッダー ファイルで次のように宣言する必要があります。

extern const int numberOfTickMarks;
extern const double tickValues[numberOfTickMarks];

がなければextern、リンカ エラーは避けられません。

実装ファイルでは、次のように再度定義する必要があります。

const int numberOfTickMarks = 6;
const double tickValues[numberOfTickMarks] = {500, 2000, 3000, 4000, 6000, 8000};
于 2013-05-08T18:14:49.447 に答える
0

main.mファイルでそれらを定義しないのはなぜですか?

type myVar;

ヘッダーで宣言し、次を使用します。

extern type myVar;

編集

コメントに書いたことから、クラス変数を使用する必要があると思います。このリソースは Objective-C では利用できないため、2 つの代替案があります。

1)このSOの回答のようにc ++を使用してください

2)この回答で説明されているように、共有インスタンスを使用します

個人的には2番がいいと思います

于 2013-05-08T18:14:38.927 に答える