Для объявления объекта C ++ нужен другой объект в качестве параметра - PullRequest
0 голосов
/ 15 ноября 2018

Объектно-ориентированный 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 , хотя это должно быть заданием FrozenMeal.cpp , и компиляция не удалась.

Я пытался включить FrozenMeal.h до Microwave.cpp , но это привело к еще большему количеству ошибок компиляции.

Я чувствую, что делаю здесь что-то ужасно неправильное.

1 Ответ

0 голосов
/ 15 ноября 2018

Добавьте защитные элементы в ваши заголовочные файлы, чтобы их содержимое не включалось более одного раза:

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)
//                                  ^
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...