尝试在构造函数中设置成员变量时代码中断

时间:2010-12-11 10:24:43

标签: c++ qt

我有一个这样的课程:

class Player
{
public:
    Player(Board * someBoard);

    void setSide(char newSide);

protected:
    Board * board;
    char side;
};

及其实施如下:

Player::Player(Board * someBoard)
{
    board = someBoard;
    side = '0';
}

void Player::setSide(char newSide)
{
    side = newSide;
}

现在我有另一个继承自它的类:

class HumanPlayer : public Player
{
public:
    HumanPlayer(Board * someBoard);
};

它的简短实现是这样的:

HumanPlayer::HumanPlayer(Board * someBoard) : Player(someBoard)
{
}

现在问题是side = '0';行使程序冻结(Windows 7中的窗口变为白色,不确定是否意味着它冻结或崩溃)。对它进行评论会使程序运行正常(并且可以将其注释掉,因为该变量尚未在任何地方使用)。

导致错误的原因是什么?如何解决?

修改<!/强>

将一些东西打印到fstream后,突然程序运行了。我试着评论打印出来。它仍然奏效。我尝试删除我添加的调试代码。它仍然有用。所以现在我的代码与上面列出的代码完全相同,但它现在神奇地起作用了。

那我现在该怎么办?忽略异常?这可能是编译器的错误吗?

2 个答案:

答案 0 :(得分:2)

我怀疑问题不是你想象的那样。

这听起来像某种内存损坏问题,但根据提供的信息确实无法判断。我有两个建议:

  1. 发布演示此问题的最小完整程序,或
  2. 尝试valgrind-type tool ,看看它是否有助于您弄清楚发生了什么。
  3. 或者,更好的是,首先查看调试器中的程序状态(一旦它挂起。)

答案 1 :(得分:1)

您是否可能使用两个不兼容的Player类定义,在不同的头文件中定义?如果定义具有不同的大小,那么'size'成员可能位于为类实例分配的内存块之外。

修改我发现您的问题已经消失。所以它可能是一个在类定义发生变化后没有重新编译的模块;但是现在你已经重新编译了所有内容,问题已经解决了。