此处是面向对象的C ++。
我应该编写一个微波对象,该对象“加热” FrozenMeal 对象。 微波对象的一种方法称为 void heatMeal(FrozenMeal),应该将 FrozenMeal 对象的实例作为参数并增加温度。
FrozenMeal.h
#include <string>
class FrozenMeal {
public:
FrozenMeal(std::string, int);
void setTemperature(double);
std::string getName() const;
int getVolume() const;
double getCoeffizient() const;
double getTemperature() const;
private:
std::string name;
int volume;
double temperature;
double coeffizient;
};
FrozenMeal.cpp
#include <string>
#include "FrozenMeal.h"
using namespace std;
FrozenMeal::FrozenMeal(string mealName, int mealVolu) {
name = mealName;
volume = mealVolu;
temperature = -18;
coeffizient = 0.24;
}
void FrozenMeal::setTemperature(double mealTemp) { temperature = mealTemp; }
string FrozenMeal::getName() const { return name; }
int FrozenMeal::getVolume() const { return volume; }
double FrozenMeal::getCoeffizient() const { return coeffizient; }
double FrozenMeal::getTemperature() const { return temperature; }
Microwave.h
#include "FrozenMeal.h"
class Microwave {
public:
Microwave();
void morePower();
void lessPower();
void setPeriod(double);
void heatMeal(FrozenMeal); // <----------------------------
int getPower() const;
double getPeriod() const;
private:
int power;
double period;
};
Microwave.cpp
#include "Microwave.h"
using namespace std;
Microwave::Microwave() {}
void Microwave::morePower() { if (power < 1000) power += 200; }
void Microwave::lessPower() { if (power > 200) power -= 200; }
void Microwave::setPeriod(double sessionPeri) { period = sessionPeri; }
void Microwave::heatMeal(FrozenMeal mealInst) {
mealInst.setTemperature(80); //example
}
int Microwave::getPower() const { return power; }
double Microwave::getPeriod() const { return period; }
现在,我的问题是我的编译器说文件 FrozenMeal.h 显然重新定义了 FrozenMeal 的对象类型,尽管这应该是< strong> FrozenMeal.cpp 文件,并且编译失败。
我尝试将 FrozenMeal.h 包含到 Microwave.cpp 中,但这导致了更多的编译器错误。
我觉得我在这里做错了什么。
答案 0 :(得分:1)
在头文件中添加包含保护,以使其内容不会被多次包含:
FrozenMeal.h
:
#ifndef FROZENMEAL_H_INCLUDED
#define FROZENMEAL_H_INCLUDED
// your code ...
#endif /* FROZENMEAL_H_INCLUDED */
Microwave.h
:
#ifndef MICROWAVE_H_INCLUDED
#define MICROWAVE_H_INCLUDED
// your code ...
#endif /* MICROWAVE_H_INCLUDED */
此外,您永远不会初始化int Microwave::power
和double Microwave::period
,因此您将在Microwave::morePower()
和Microwave::lessPower()
中读写垃圾值
如注释中所建议,您希望通过引用获取Microwave::heatMeal()
的参数,以便该函数可以修改传递的对象:
void Microwave::heatMeal(FrozenMeal &mealInst)
// ^