C++:对象作为参数传递——代码编译失败问题咨询
问题分析与修复方案
嘿,我来帮你揪出这个编译错误的问题所在~你的代码没法编译的核心原因就是参数类型完全不匹配,咱们拆开来说:
1. 方法要求和你传的参数对不上
Game类里的getPlayer方法声明是这样的:
void getPlayer(Player &player) { }
它需要的是一个Player对象的左值引用,但你在main函数里调用的时候写了:
game->getPlayer(&player);
这里的player本身是Player*类型的指针,&player取的是这个指针变量的地址,也就是Player**(指针的指针)类型,和方法要求的Player&完全不是一回事,编译器肯定会报错。
2. 两种可行的修复方案
根据你想传递Player对象的需求,给你两种常见的修改方式:
方案一:把方法参数改成指针类型
如果你想继续用指针传递对象,可以修改Game类的方法声明,让它接收Player指针:
class Game { public: Game() { } // 参数改为Player*指针 void getPlayer(Player *player) { } }; int main() { Game *game = new Game(); Player *player = new Player(); // 直接传递player指针就行 game->getPlayer(player); // 别忘了释放动态分配的内存,避免泄漏 delete game; delete player; return 0; }
方案二:传递对象的引用(调整main里的传参)
如果想保留方法的引用参数,那你需要把指针解引用成对象,再传递它的引用:
int main() { Game *game = new Game(); Player *player = new Player(); // 用*player拿到指针指向的对象,传递它的引用 game->getPlayer(*player); delete game; delete player; return 0; }
要是你不需要动态分配内存(大部分场景下栈对象更省心),还可以简化成这样:
int main() { Game game; // 栈上创建Game对象 Player player; // 栈上创建Player对象 game.getPlayer(player); // 直接传递栈对象的引用 return 0; }
内容的提问来源于stack exchange,提问作者Valenciano
相关产品推荐
相关产品推荐

