编译器没有将我的对象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 *'
答案 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;
}