编译器没有将我的对象识别为其类类型

时间:2012-02-09 03:55:24

标签: c++ class initialization

编译器没有将我的对象heatingUnit识别为类HeatUnit。我不知道为什么?

// 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) - &gt; BangBangControl :: heatingUnit',这是非类型'HeatingUnit *'     BangBangControl.cpp:32:错误:在'((BangBangControl *)this中请求成员'turnOff' - &gt; BangBangControl :: heatingUnit',它是非类型的'HeatingUnit *'     BangBangControl.cpp:33:错误:在'((BangBangControl *)this中请求成员'turnOn' - &gt; BangBangControl :: heatingUnit',这是非类型'HeatingUnit *'

  

2 个答案:

答案 0 :(得分:1)

heatingUnit.tick();

应该是:

heatingUnit->tick();   
           ^^      

您已将heatingUnit声明为指针成员,因此您需要通过->而不是.来访问它。

此外,您在需要类定义时错过了;

class BangBangControl
{


};
^^

答案 1 :(得分:1)

您有一个指向HeatingUnit的指针,当您在其上应用方法时需要取消引用,因此您的更新方法应为:

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