静态函数接收错误的参数

时间:2015-12-22 10:40:55

标签: c++ parameters static const instance

我有一个静态函数的奇怪行为,无法找到解决方案。这是我为一个学校项目写的计算机播放器。对于上下文:Board和Evaluation是我的逻辑使用的类,但它们的功能在这里并不重要。

我有一个类MatchUnit,它有一个创建实例的方法和一个指定本地字段的构造函数:

static void MatchUnit::CreateInstance(Board& realBoard, Board& altBoard, unsigned char turn, char currentPlayer)
{
    // [P2]
    _instance = new MatchUnit(realBoard, altBoard, turn, currentPlayer);
    return _instance;
}

MatchUnit::MatchUnit(Board& realBoard, Board& altBoard, unsigned char turn, char currentPlayer)
{
    _realBoard = &realBoard;
    _altBoard = &altBoard;
    _turn = _moveNr = turn;
    _currentPlayer = currentPlayer;
}

MatchUnit.h

中定义方法的字段
class MatchUnit {
public:
    static MatchUnit* CreateInstance(Board& realBoard, Board& altBoard, unsigned charturn, char currentPlayer);
private:
    Board* _realBoard;
    Board* _altBoard;
    uchar _turn;
    uchar _moveNr;
    char _currentPlayer;
    MatchUnit(Board& realBoard, Board& altBoard, unsigned char turn, char currentPlayer);
};

MatchUnit是一个单身人士,但是我离开了getter和实例的字段,因为我认为它们不重要。

Board包含非静态私有评估指针(Evaluation* _eval

在我的主要功能中,我现在称之为有问题的方法:

Board* realboard = new Board();
Board* altboard = new Board();

// Internally the board constructors assigned their field pointers:
// _eval = new Evaluation();

// [P1]
MatchUnit::CreateInstance(*realboard, *altboard, 0, currentPlayer);

如果我使用VS2015的调试视图并在[P1]处暂停,我可以看到板的_eval字段没有指向null。但是,当我继续指向[P2]时,他们指向null!板的其他区域也有奇怪的值,bool设置为true,之前是false,整数似乎有随机值,彼此不同!

为什么CreateInstance的参数与我给他们的参数完全不同?

1 个答案:

答案 0 :(得分:1)

函数CreateInstance的签名在标题和来源方面有所不同。在您的源代码中,您将第三个参数声明为类型uchar,而在标题中将其声明为unsigned (int)(可能是由于错误输入空格)。当您调用函数时,编译器会生成与标题中的参数匹配的代码,而您的函数将使用源中定义的参数。由于参数大小不匹配,您的功能似乎收到了错误的值。您只需编辑其中一个参数定义即可解决此问题。