C++类内部成员变量传值时currentHP出现异常负值是什么原因?
C++代码currentHP返回异常负数问题排查
你的代码存在多处拼写、初始化、语法及调用错误,最终导致读取到未初始化的内存垃圾值,具体问题如下:
- 变量拼写与大小写不匹配
类内定义的成员为MaxHP(首字母大写M)、currentHP(首字母小写c),但构造函数中赋值的是拼写错误的maxHP(首字母小写m),getHP方法返回的是拼写错误的CurrentHP(首字母大写C),拼写不一致会导致要么编译失败,要么触发未定义行为读取到错误值。 - 成员初始化逻辑错误
你在类的成员定义区直接写currentHP = MaxHP;,该初始化操作执行时机早于构造函数,此时MaxHP还未被赋值,本身就是内存中的随机垃圾值,所以currentHP也会被赋值为垃圾值。同时你的构造函数仅给拼写错误的maxHP赋值,正确的MaxHP和currentHP都没有被正确初始化,最终读取到的就是随机负数。 - 基础语法与调用错误
- 构造函数内的赋值语句
maxHP=h末尾缺少分号 - main函数中创建
warrior对象的语句末尾缺少分号 getHP是Character类的成员函数,不能直接调用,必须通过实例对象调用,即warrior.getHP()- 代码缺少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
相关产品推荐
相关产品推荐

