2016-04-11 25 views
1

我正在編寫一個遊戲,現在我正試圖分解爲了組織而分成多個文件的一個文件。我遇到了一個問題,我不太清楚如何修復。最初,我有一個主要定義在這樣的地圖:將字符串數組定義從主文件移動到另一個文件

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

這工作正常。現在我提出的聲明到一個名爲「map.h」文件:

extern const char *map[]; 

而且在一個文件中的實際定義所謂的「map.c」:

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

這給了我一個錯誤: 「衝突的類型圖」

以及衆多的警告:「從不相容的指針類型初始化[-Wincompatible指針類型]」 -------------「」

和:「標量中的過量元素初始化程序「後面的每一行。

如果我在map.c中的「map」中刪除了dereference操作符,那麼它給了我「初始化器元素在加載時不可計算」。 然後我想我可以通過在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

相關問題