C++;对象中的对象 我从OOP的角度编写了一个C++中的ARDUINO程序,遇到了一个问题:一个类的方法无法看到在该类的构造函数中定义的对象。我试图完成的是创建一个对象(类),用于容纳各种方法,这些方法用于计算和输出来自DHT11传感器的数据。 完整代码: * DhtSensor.h * * Created on: 2017-04-18 * Author: Secret */ #ifndef DhtSensor_h #define DhtSensor_h class DhtSensor { public: DhtSensor(int dhtPin); //constructor void read(); void printToScreen(); //a method for printing to LCD private: unsigned long previousMillis; //Millis() of last reading const long readInterval = 3000; //How often we take readings float readingData[2][30]; //store current ant last values of temperature [0] and humidity [1] readings int readingIndex; bool initDone; //Bool value to check if initialization has been complete (Array full) float totalTemp; float totalHumidity; float avgTemp; float avgHumidity; float hic; //Heat Index }; #endif /* * DhtSensor.cpp * * Created on: 2017-04-18 * Author: Secret */ #include "DhtSensor.h" #include "DHT.h" #include "Arduino.h" DhtSensor::DhtSensor(int dhtPin){ DHT dht(dhtPin,DHT11); dht.begin(); previousMillis = 0; totalTemp = avgTemp = 0; totalHumidity = avgHumidity = 0; hic = 0; readingIndex = 0; initDone = false; for(int i = 0; i<2; i++){ //matrix init for(int j=0; j<30; j++){ readingData[i][j]=0; } } } void DhtSensor::read(){ unsigned long currentMillis = millis(); if (currentMillis - previousMillis >= readInterval){ readingData[0][readingIndex] = dht.readTemperature(); } } *DhtSensor.h * *创建日期:2017-04-18 *作者:秘密 */ #ifndef DHT传感器 #定义DHT传感器 类DHT传感器{ 公众: DhtSensor(int dhtPin);//构造函数 无效读取(); void printToScreen();//打印到LCD的方法 私人: 未签名的long previousMillis;//上次读取的Millis() const long readInterval=3000;//我们多久读取一次数据 浮点读取数据[2][30];//存储温度[0]和湿度[1]读数的当前值和最后值 int-readingIndex; bool initDone;//检查初始化是否已完成(数组已满)的bool值 浮动总温度; 浮子总湿度; 浮动avgTemp; 浮动平均湿度; 浮动hic;//热指数 }; #恩迪夫 /* *DhtSensor.cpp * *创建日期:2017-04-18 *作者:秘密 */ #包括“DhtSensor.h” #包括“DHT.h” #包括“Arduino.h” DHT传感器::DHT传感器(int dhtPin){ DHT DHT(dhtPin,DHT11); dht.begin(); 前一毫秒=0; totalTemp=avgTemp=0; 总湿度=平均湿度=0; hic=0; readingIndex=0; initDone=false; 对于(int i=0;i

C++;对象中的对象 我从OOP的角度编写了一个C++中的ARDUINO程序,遇到了一个问题:一个类的方法无法看到在该类的构造函数中定义的对象。我试图完成的是创建一个对象(类),用于容纳各种方法,这些方法用于计算和输出来自DHT11传感器的数据。 完整代码: * DhtSensor.h * * Created on: 2017-04-18 * Author: Secret */ #ifndef DhtSensor_h #define DhtSensor_h class DhtSensor { public: DhtSensor(int dhtPin); //constructor void read(); void printToScreen(); //a method for printing to LCD private: unsigned long previousMillis; //Millis() of last reading const long readInterval = 3000; //How often we take readings float readingData[2][30]; //store current ant last values of temperature [0] and humidity [1] readings int readingIndex; bool initDone; //Bool value to check if initialization has been complete (Array full) float totalTemp; float totalHumidity; float avgTemp; float avgHumidity; float hic; //Heat Index }; #endif /* * DhtSensor.cpp * * Created on: 2017-04-18 * Author: Secret */ #include "DhtSensor.h" #include "DHT.h" #include "Arduino.h" DhtSensor::DhtSensor(int dhtPin){ DHT dht(dhtPin,DHT11); dht.begin(); previousMillis = 0; totalTemp = avgTemp = 0; totalHumidity = avgHumidity = 0; hic = 0; readingIndex = 0; initDone = false; for(int i = 0; i<2; i++){ //matrix init for(int j=0; j<30; j++){ readingData[i][j]=0; } } } void DhtSensor::read(){ unsigned long currentMillis = millis(); if (currentMillis - previousMillis >= readInterval){ readingData[0][readingIndex] = dht.readTemperature(); } } *DhtSensor.h * *创建日期:2017-04-18 *作者:秘密 */ #ifndef DHT传感器 #定义DHT传感器 类DHT传感器{ 公众: DhtSensor(int dhtPin);//构造函数 无效读取(); void printToScreen();//打印到LCD的方法 私人: 未签名的long previousMillis;//上次读取的Millis() const long readInterval=3000;//我们多久读取一次数据 浮点读取数据[2][30];//存储温度[0]和湿度[1]读数的当前值和最后值 int-readingIndex; bool initDone;//检查初始化是否已完成(数组已满)的bool值 浮动总温度; 浮子总湿度; 浮动avgTemp; 浮动平均湿度; 浮动hic;//热指数 }; #恩迪夫 /* *DhtSensor.cpp * *创建日期:2017-04-18 *作者:秘密 */ #包括“DhtSensor.h” #包括“DHT.h” #包括“Arduino.h” DHT传感器::DHT传感器(int dhtPin){ DHT DHT(dhtPin,DHT11); dht.begin(); 前一毫秒=0; totalTemp=avgTemp=0; 总湿度=平均湿度=0; hic=0; readingIndex=0; initDone=false; 对于(int i=0;i,c++,arduino,C++,Arduino,您在构造函数中声明'dht'变量,这是自动分配,因此在块离开后(即在此处创建对象时),它将消失)。您应该在类规范中声明对象,然后在构造函数中初始化它 也可以在使用对象中的对象时使用初始化列表,你可能想让实例成为你的类成员而不是函数的一部分。在你开始使用语言之前,你真的需要读一本C++的书。C++的试验和错误是非常痛苦的,通常不会导致良好的RESU。谢谢!真不敢相信我竟然没有注意到这么明显的错误!

您在构造函数中声明'dht'变量,这是自动分配,因此在块离开后(即在此处创建对象时),它将消失)。您应该在类规范中声明对象,然后在构造函数中初始化它


也可以在使用对象中的对象时使用初始化列表,

你可能想让实例成为你的类成员而不是函数的一部分。在你开始使用语言之前,你真的需要读一本C++的书。C++的试验和错误是非常痛苦的,通常不会导致良好的RESU。谢谢!真不敢相信我竟然没有注意到这么明显的错误!