2016-04-11 9 views
1

私はゲームを書いていますが、今は私が組織のために複数のファイルを分割しようとしています。私は問題にぶつかってきましたが、私はどのように修正するかについてはあまりよく分かりません。最初は、次のようにmainにマップを定義しました:文字列配列の定義をメインファイルから別のファイルに移動する

char const *map[]={ 
    " ------------- ", 
    "|......|......|", 
    "|.............|", 
    "|......---.---|", 
    "|---.---...|..|", 
    "|..........|..|", 
    "|..........|..|", 
    "|.............|", 
    "|..........|..|", 
    " ------------- ", 
}; 

これは問題なく機能していました。

#include "map.h" 
*map = { 
    " ------------- ", 
    "|......|......|", 
    "|.............|", 
    "|......---.---|", 
    "|---.---...|..|", 
    "|..........|..|", 
    "|..........|..|", 
    "|.............|", 
    "|..........|..|", 
    " ------------- ", 
}; 

これは私にエラーを与える:「map.c」と呼ばれる

extern const char *map[]; 

、ファイル内の実際の定義:今、私は「map.h」と呼ばれるファイルに宣言を移動しています:

「をマップするための競合型」ならびに多数の警告:「互換性のないポインタ型からの初期化[-Wincompatibleポインタ・タイプ」-------------「」

と: "スカラーの余分な要素それ以降の各行に対して「イニシャライザ」を設定します。

map.cの "map"のfronで逆参照演算子を削除した場合、 "initializer要素は読み込み時に計算不可能"になります。 私はmap.hで配列を定義するだけでこの問題を回避できると考えましたが、もちろんmap.hをインクルードするファイルごとに複数の定義にエラーが発生します。

これを実装する/私が間違っていることは何ですか?

おかげで、ニック

+0

宣言と定義ftwは 'map.c'の中で' * map'の宣言を修正していますが、間違っています。 – t0mm13b

+0

im map.cを使用するconst char * map = { –

+0

@ t0mm13b他の人が示唆しているように、定義を意味しましたか?あるいは宣言に誤りがありますか? – Nic

答えて

0

あなたのヘッダファイルmap.hは、それが含まガードを持つべきであるにもかかわらず、結構です。インクルードガードを追加することは、ヘッダーファイルの一番上にある独自の行に#pragma onceを追加するだけで簡単に行うことができます。

ソースファイルmap.cに修正が必要な構文エラーがあります。

const char *map = { 
    /* ... */ 
}; 
+0

ああ、申し訳ありません、はい、私はヘッダーファイル全体を含めませんでした。私は持っています #ifndef H_MAP #define H_MAP トップに#endifで終了しました。あなたが提案した通り* mapをconst char * mapに変更しましたが、私はまだ同じエラーを受けています。 – Nic

+0

ああ私。私はスマートな人ではありません。私はあなたが何をしたのか/あなたが何を意味したのかを理解しました。 – Nic

関連する問題