You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 03:59:23