我有一个这样的课程:
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
后,突然程序运行了。我试着评论打印出来。它仍然奏效。我尝试删除我添加的调试代码。它仍然有用。所以现在我的代码与上面列出的代码完全相同,但它现在神奇地起作用了。
那我现在该怎么办?忽略异常?这可能是编译器的错误吗?
答案 0 :(得分:2)
我怀疑问题不是你想象的那样。
这听起来像某种内存损坏问题,但根据提供的信息确实无法判断。我有两个建议:
或者,更好的是,首先查看调试器中的程序状态(一旦它挂起。)
答案 1 :(得分:1)
您是否可能使用两个不兼容的Player类定义,在不同的头文件中定义?如果定义具有不同的大小,那么'size'成员可能位于为类实例分配的内存块之外。
修改我发现您的问题已经消失。所以它可能是一个在类定义发生变化后没有重新编译的模块;但是现在你已经重新编译了所有内容,问题已经解决了。