C++中向构造函数传递指针后指针值未改变的问题求助
C++中向构造函数传递指针后指针值未改变的问题求助
我刚学C++,现在试着写一个板球计分程序。目前我已经能从两个文本文件里读取主队和客队的球员名单,这部分跑起来没问题。我还创建了Over(投球轮次)和Ball(单次投球)两个类,Over本质是Ball的vector容器,一般包含6次合法投球。
按照板球的规则,一个投手投完一轮后就得换另一个投手上场;另外,当一次投球的得分是奇数时,当前击球手(striker)和非击球手(non-striker)要互换角色——非击球手变击球手,击球手变非击球手。
现在我卡在一个问题上:我把指向当前击球手和非击球手的指针传给Ball类的构造函数,想在构造函数里处理两人互换的逻辑,但构造函数里修改指针指向后,外部的指针值根本没变化!我本来以为传指针进去就能修改外部的指向,后来改成传指针的引用还是没生效,搞了半天都没摸清楚哪里错了,有没有大佬能帮我看看?
给大家贴一段我大概的代码逻辑,方便排查:
#include <vector> #include <iostream> #include <string> using namespace std; // 先简化定义Player类 class Player { public: string name; Player(string n) : name(n) {} }; class Ball { public: Ball(Player* striker, Player* nonStriker, int runs) { if (runs % 2 != 0) { // 尝试互换两个指针的指向 Player* temp = striker; striker = nonStriker; nonStriker = temp; } // 其他投球相关的记录逻辑 } }; int main() { Player striker("Smith"); Player nonStriker("Johnson"); Player* currentStriker = &striker; Player* currentNonStriker = &nonStriker; // 这次投球得3分,奇数,应该触发互换 Ball ball(currentStriker, currentNonStriker, 3); // 但这里输出的还是Smith和Johnson,根本没互换! cout << currentStriker->name << " " << currentNonStriker->name << endl; return 0; }
后来我把构造函数的参数改成Player* &striker和Player* &nonStriker,结果还是不对,这到底是哪里出问题了啊?
备注:内容来源于stack exchange,提问作者eeqesri
相关产品推荐
相关产品推荐

