Компилятор не распознает мой объект как тип его класса - PullRequest
0 голосов
/ 09 февраля 2012

Компилятор не распознает мой объект heatingUnit как тип класса HeatingUnit. Понятия не имею почему?

// Jimoh Ovbiagele (JAO945)

#include <iostream>
#include <stdio.h>
#include <stdbool.h>
#include "HeatingUnit.h"

class BangBangControl{

public:

  HeatingUnit *heatingUnit;
  int tempToMaintain;


BangBangControl(int temp, bool isOn, int initialTemp)
: heatingUnit(new HeatingUnit(isOn, initialTemp)),
  tempToMaintain(temp){

}

void setTemp(int newTemp){
  tempToMaintain = newTemp;
}

int getTemp(){
  return tempToMaintain;
}

int update(){
  int i = heatingUnit.tick();
  if (i > tempToMaintain + 2) heatingUnit.turnOff();
  if (i < tempToMaintain - 2) heatingUnit.turnOn();
  return i;
}

int main(){
  BangBangControl bBC(50, true, 0);

  for(int i = 0; i < 100; i++){        
    std::cout << "Temp to maintain is: " << bBC.getTemp() << " Current temp is: " << bBC.update() << "\n"; 

  }

  return(0);
}


};

Я получаю этот журнал ошибок

BangBangControl.cpp: в функции-члене int BangBangControl :: update () ’: BangBangControl.cpp: 31: ошибка: запрос на членство в 'tick' в ‘((BangBangControl *) this) -> BangBangControl :: heatingUnit’, который относится к неклассовому типу «HeatingUnit *» BangBangControl.cpp: 32: ошибка: запрос на член 'turnOff' в ‘((BangBangControl *) this) -> BangBangControl :: heatingUnit’, который относится к неклассовому типу ‘HeatingUnit *’ BangBangControl.cpp: 33: ошибка: запрос на член 'turnOn' в Bang ((BangBangControl *) this) -> BangBangControl :: heatingUnit ’, который не относится к классу‘ HeatingUnit * ’

Ответы [ 2 ]

1 голос
/ 09 февраля 2012

У вас есть указатель на HeatingUnit, который необходимо разыменовать, когда вы собираетесь применить к нему методы, поэтому ваш метод обновления должен быть:

int update(){
    int i = heatingUnit->tick();
    if (i > tempToMaintain + 2) heatingUnit->turnOff();
    if (i < tempToMaintain - 2) heatingUnit->turnOn();
    return i;
} 
1 голос
/ 09 февраля 2012
heatingUnit.tick();

должно быть:

heatingUnit->tick();   
           ^^      

Вы объявили heatingUnit как член-указатель, поэтому вам необходимо получить к нему доступ через ->, а не ..

Кроме того, вы пропустили ; при необходимости определения класса.

class BangBangControl
{


};
^^
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...