人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

Objective-Cのコードでコンパイルエラーが出ます。添付の図のようなエラーメッセージなのですが何が何だか・・・

ひょっとしてSTONEという定数を定義するのがうまくいってないのでしょうか。定数はConst.hというファイルに記述し、使用する実装ファイルで#importしています。

よろしくお願いします。

1340011920
●拡大する

●質問者: weed_7777
●カテゴリ:コンピュータ
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● きゃづみぃ
●20ポイント

STONEなど重複して定義してないか 確認してみてください。


weed_7777さんのコメント
私も重複が怖いと思い、Const.hという別ファイルにして2つの実装ファイルで#import "Const.h"としています。試しに片方の実装ファイルでconst NSInteger STONE2 = 0;(「2」を付けた)とするとコンパイルは成功しました。複数の実装ファイルで同じ定数を使うことはできないのでしょうか・・・

きゃづみぃさんのコメント
Publicの場合は ひとつでしょうね。変数のスコープによるでしょう。

きゃづみぃさんのコメント
ただ インポートファイルは ソースを 分けただけで それ以上の意味は ないと思われますよ。 それぞれのファイルに 同じ変数は 定義できません。

weed_7777さんのコメント
できればこのページにあるように#ifndefを使って処理したいのですが・・・ http://blog.s21g.com/articles/1058 ちなみに私の書いたConst.hはこのような感じです。 https://github.com/weed/p120618_Janken/blob/master/Const.h

きゃづみぃさんのコメント
インポートしているのは Const.hだけですか?

weed_7777さんのコメント
すいません、解決いたしました。アドバイス有難うございました。

2 ● a-kuma3
●80ポイント ベストアンサー

こういうふうに書きます。

// Const.h
extern NSInteger const STONE;
extern NSInteger const SCISSORS;
extern NSInteger const PAPER;

この Const.h を STONE などを使いたいソースで #import。

// Const.m
NSInteger const STONE = 0;
NSInteger const SCISSORS = 1;
NSInteger const PAPER = 2;

STONE の実体(値)を定義するソースをひとつ作ります。
この Const.m も、コンパイル&リンクの対象にします。


weed_7777さんのコメント
神降臨ですね。バッチリ動きました。ありがとうございました。
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ