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

C++类内部成员变量传值时currentHP出现异常负值是什么原因?

C++代码currentHP返回异常负数问题排查

你的代码存在多处拼写、初始化、语法及调用错误,最终导致读取到未初始化的内存垃圾值,具体问题如下:

  • 变量拼写与大小写不匹配
    类内定义的成员为MaxHP(首字母大写M)、currentHP(首字母小写c),但构造函数中赋值的是拼写错误的maxHP(首字母小写m),getHP方法返回的是拼写错误的CurrentHP(首字母大写C),拼写不一致会导致要么编译失败,要么触发未定义行为读取到错误值。
  • 成员初始化逻辑错误
    你在类的成员定义区直接写currentHP = MaxHP;,该初始化操作执行时机早于构造函数,此时MaxHP还未被赋值,本身就是内存中的随机垃圾值,所以currentHP也会被赋值为垃圾值。同时你的构造函数仅给拼写错误的maxHP赋值,正确的MaxHP和currentHP都没有被正确初始化,最终读取到的就是随机负数。
  • 基础语法与调用错误
    1. 构造函数内的赋值语句maxHP=h末尾缺少分号
    2. main函数中创建warrior对象的语句末尾缺少分号
    3. getHP是Character类的成员函数,不能直接调用,必须通过实例对象调用,即warrior.getHP()
    4. 代码缺少iostream头文件引入,也没有声明std命名空间,cout无法直接使用

修正后的参考代码

#include <iostream>
using namespace std;

class Character{
public:
    int MaxHP;
    int currentHP;
    int getHP()
    {
        return currentHP;
    }
    Character(int h){
        MaxHP = h;
        currentHP = MaxHP; // 构造函数内赋值,确保MaxHP已有有效值
    };
    ~Character(){};
};

int main()
{
    Character warrior(300);
    cout<<warrior.getHP();
    return 0;
}

内容的提问来源于stack exchange,提问作者Sebastian Miklosevic

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 00:24:01