gpt4 book ai didi

c++ - 静态函数接收到错误的参数

转载 作者:行者123 更新时间:2023-11-28 05:54:51 24 4
gpt4 key购买 nike

我的静态函数有这种奇怪的行为,找不到解决方案。这是我为学校项目编写的计算机播放器。对于上下文: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 包含一个非静态私有(private)评估指针(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 的调试 View 并在 [P1] 处暂停,我可以看到板的 _eval 字段未指向 null。但是当我继续指向 [P2] 时,它们指向 null!棋盘的其他字段也有奇怪的值,之前设置为真的 bool 值是假的,整数似乎有随机值,彼此不同!

为什么CreateInstance的参数和我给的完全不一样?

最佳答案

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

关于c++ - 静态函数接收到错误的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34413893/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com