C++重载<<输出运算符未按预期工作,输出指针地址而非类成员内容
问题原因
你重载的<<运算符形参为const Actor&引用类型,但你传入的player2是Actor*指针类型,C++没有匹配Actor*的自定义输出重载,所以会触发默认的指针输出逻辑,直接打印内存地址。
解决方法
- 输出时对指针做解引用操作即可调用你写的重载函数,代码修改为:
std::cout << *player2;
如果需要考虑指针为空的场景,可以先加非空判断避免崩溃:
if (player2 != nullptr) { std::cout << *player2; }
额外代码问题提示
现有代码里还有两处容易出问题的地方:
Heal成员函数的实现写的是health=+amount,等效于直接把health赋值为amount,不是预期的累加血量,应该修改为health += amount- 重载
<<的输出逻辑里两个字段之间没有分隔符,会出现DAMAGE DONE: 10HEALTH: 100这类连在一起的内容,建议在中间添加空格、换行等分隔符提升可读性。
内容的提问来源于stack exchange,提问作者mak95
相关产品推荐
相关产品推荐

