2012-07-09 27 views
-4

我的代碼有趣的問題...在調試模式下運行(Eclipse/CDT)...我所有的瓷磚似乎都有他們的牆布爾設置爲true ?任何人都知道wtf正在發生?布爾被初始化爲true,即使構造函數傳遞爲false

代碼,充分MVC幾乎適當OO(我認爲),在這裏:

的main.cpp http://pastebin.com/f14kmfap

gridworld.h http://pastebin.com/vCmzxzrj

gridworld.cpp http://pastebin.com/jKKRFE9V

我懷疑它與此片段有關:

Tile::Tile(bool w) { 
     wall = w; 
     event = false; 
     eventText = ""; 
} 

我如何使用它來生成地圖:

map[1][2] = new Tile(false); 
+6

我相信沒有人會通過引擎收錄挖幫助你。製作一個小型自包含的問題示例,並在此處發佈。 – 2012-07-09 03:44:06

+0

特別是你認爲哪些瓷磚是假的?另外不要忘記清理所有新的Tile()語句的內存。 – xdhmoore 2012-07-09 03:48:09

+0

@xdhmoore所有由第68到95行聲明的圖塊。它們都使用非默認的構造函數。 – 2012-07-09 03:52:04

回答

3

首先,Tile map[8][8];,將有瓷磚默認構造。將bool wall設置爲true。

在地圖構造函數中,您使用的是Map::map[r][c] = new Tile(),右側是Tile*,左側是Tile。 爲分配映射正確的語法是map[r][c] = Tile();,或map[6][4]=Tile(false);

+0

謝謝!我只是在朋友的幫助下計算出來的。正是我學到的東西!謝謝。 – 2012-07-09 04:28:41

+2

它會編譯:指針被轉換爲'bool',然後通過轉換構造函數轉換爲'Tile'。因此,分配的磁貼默默泄漏並被忽略,並且數組中的磁盤被初始化爲「true」。您可以通過使轉換構造函數顯式來避免像這樣的錯誤:'顯式映射(bool w)' – 2012-07-09 06:11:07

1

你在很多地方使用new Tile()它使用的默認Tile構造函數。在Tile的默認ctor內,您正在初始化wall = true;

+0

+1用於烘烤Pastebin。 :) – 2012-07-09 03:47:08

+0

這是真的,但所有對重載的Tile(bool w)的調用似乎仍然將wall設置爲true,它總是以false的形式傳遞,如示例中所示。 – 2012-07-09 03:48:12