我有一个与动物有关的基本类和标题设置,我试图有一个显示动物当前饥饿程度的功能。经过测试,我发现饥饿程度不是我设定的初始值。
Monkey.cpp
#include "Monkey.hpp"
using namespace std;
Monkey::Monkey() {
}
unsigned int foodEaten = 0;
unsigned int foodIntake = 800;
unsigned int Monkey::hungerLevel() const {
return (makefoodIntake - foodEaten);
}
Monkey.hpp
#ifndef MONKEY_HPP
#define MONKEY_HPP
class Monkey : public Animal {
private:
unsigned int foodEaten;
unsigned int foodIntake;
public:
Monkey();
// Overridden to implement the monkey's hunger level
virtual unsigned int hungerLevel() const;
#endif /* end of include guard: MONKEY_HPP */
为什么这最初不会返回800?
答案 0 :(得分:1)
foodEaten
文件中定义的foodIntake
和.cpp
都是全局范围内的两个变量,而不是类Monkey
的成员。
也在头文件中初始化它们:
class Monkey {
private:
unsigned int foodEaten{0};
unsigned int foodIntake{800};
// ...
};
答案 1 :(得分:1)
因为你没有在构造函数中初始化类的成员。
您还有一些其他变量,在全局范围内声明的名称相同。
但是,由于您具有相同名称的类成员,因此该方法使用类成员,而不是全局范围中的变量。
您需要简单地初始化类成员,而不是声明同名的全局变量:
Monkey::Monkey() : foodEaten(0), foodIntake(800)
}