【问题标题】:Boolean is being initialised as true, even though the constructor is passed false布尔值被初始化为真,即使构造函数被传递为假
【发布时间】:2012-07-08 11:37:21
【问题描述】:

我的代码有一个有趣的问题...在调试模式下运行(Eclipse/CDT)...我所有的图块似乎都将它们的墙布尔设置为 true?有人知道 wtf 是怎么回事吗?

代码,完全 MVC 和几乎正确的 OO(我认为),在这里:

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

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

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

我怀疑这与这里的 sn-p 有关:

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

以及我如何使用它来生成地图:

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

【问题讨论】:

  • 我怀疑是否有人会挖掘粘贴箱来帮助您。制作一个独立的小例子,并在此处发布。
  • 您特别希望哪些图块是假的?另外不要忘记清理所有新 Tile() 语句的内存。
  • @xdhmoore 第 68 行到第 95 行声明的所有图块。它们都使用非默认构造函数。
  • 嗯?为什么你不能在 ctors 上使用断点运行调试器?甚至打印报表?你会很容易发现
  • 我找不到任何东西。您的调试器是否可能没有在最新版本的代码上运行?

标签: c++ model-view-controller oop


【解决方案1】:

您在许多使用Tile 的默认ctor 的地方使用new Tile()。在Tile 的默认ctor 内部,您正在初始化wall = true;。

【讨论】:

  • 这是真的,但所有对重载 Tile(bool w) 的调用似乎仍将 wall 设置为 true,它始终作为 false 传递,就像在示例中一样。
【解决方案2】:

首先,Tile map[8][8]; 将默认构建图块。将 bool wall 设置为 true。

在您使用Map::map[r][c] = new Tile() 的Map 构造函数中,右侧是Tile*,左侧是Tile。 分配给地图的正确语法是map[r][c] = Tile();,或map[6][4]=Tile(false);

【讨论】:

  • 谢谢!我只是在朋友的帮助下才弄清楚这一点。正是我学到的!谢谢。
  • 它将编译:指针转换为bool,然后通过转换构造函数转换为Tile。所以分配的瓦片被悄悄地泄漏和忽略,数组中的瓦片被初始化为true。你可以通过明确转换构造函数来避免这样的错误:explicit Map(bool w)
猜你喜欢
  • 2013-06-05
  • 1970-01-01
  • 2019-11-23
  • 1970-01-01
  • 1970-01-01
  • 2023-02-14
  • 1970-01-01
  • 1970-01-01
  • 2015-02-08
相关资源
最近更新 更多