C ++对象声明需要另一个对象作为参数

时间:2018-11-14 23:47:37

标签: c++ oop

此处是面向对象的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 中,但这导致了更多的编译器错误。

我觉得我在这里做错了什么。

1 个答案:

答案 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::powerdouble Microwave::period,因此您将在Microwave::morePower()Microwave::lessPower()中读写垃圾值

如注释中所建议,您希望通过引用获取Microwave::heatMeal()的参数,以便该函数可以修改传递的对象:

void Microwave::heatMeal(FrozenMeal &mealInst)
//                                  ^