C++ 布尔值被初始化为true,即使构造函数被传递为false
我的代码有一个有趣的问题。。。正在调试模式(Eclipse/CDT)下运行。。。我所有的瓷砖似乎都已将墙布尔值设置为真?有人知道wtf正在进行吗 代码,完全MVC和几乎正确的OO(我认为),如下所示: main.cpp gridworld.h gridworld.cpp 我怀疑这与这里的片段有关:C++ 布尔值被初始化为true,即使构造函数被传递为false,c++,model-view-controller,oop,C++,Model View Controller,Oop,我的代码有一个有趣的问题。。。正在调试模式(Eclipse/CDT)下运行。。。我所有的瓷砖似乎都已将墙布尔值设置为真?有人知道wtf正在进行吗 代码,完全MVC和几乎正确的OO(我认为),如下所示: main.cpp gridworld.h gridworld.cpp 我怀疑这与这里的片段有关: Tile::Tile(bool w) { wall = w; event = false; eventText = ""; } 以及我如何使用它生成地
Tile::Tile(bool w) {
wall = w;
event = false;
eventText = "";
}
以及我如何使用它生成地图:
map[1][2] = new Tile(false);
您在许多地方使用的是
new Tile()。在Tile
的默认ctor内,您正在初始化wall=true代码>首先是平铺图[8][8]代码>,将构造默认的平铺。将boolwall
设置为true
在映射构造函数中,您使用的是Map::Map[r][c]=new Tile()
右侧是Tile*
,左侧是Tile
。
分配给map的正确语法是map[r][c]=Tile()代码>,或映射[6][4]=平铺(假)代码>我怀疑是否有人会从垃圾桶里挖出来帮助你。就这个问题做一个独立的小例子,并在这里发布。你特别希望哪一个图块是假的?另外,不要忘记清理所有新Tile()语句的内存。@xdhmoore第68行到第95行声明的所有Tile。它们都使用非默认构造函数?为什么你不能在它上面运行一个调试器,而断点在它上面呢?甚至打印报表?你很容易就会发现我找不到任何东西。您的调试器是否可能没有在最新版本的代码上运行?这是真的,但是对重载平铺(bool w)的所有调用似乎仍然将wall设置为true,在这里它总是作为false传递,如示例中所示。谢谢!我是在一个朋友的帮助下才弄明白的。正是我学到的!谢谢。它将编译:指针被转换为bool
,然后通过转换构造函数转换为Tile
。因此,分配的磁贴被悄悄泄漏并忽略,而数组中的磁贴被初始化为true
。通过使转换构造函数显式:explicit-Map(bool-w)