c++ - 在 C++ 的此构造函数警告中未初始化成员“xyz”
问题描述
我有以下课程:
class OneWireSensor : public Sensor {
private:
float lastTemperatureValue;
float lastHumidityValue;
public:
OneWireSensor(PinData *pinData);
float getLastTempVal(void);
float getLastHumidVal(void);
};
类的构造函数:
OneWireSensor::OneWireSensor(PinData *pinData) : lastTemperatureValue(0.0F), lastHumidityValue(0.0F) {
auto oneWireDriver = std::make_unique<OneWireDriver>(pinData);
this->driver = std::move(oneWireDriver);
this->lastTemperatureValue = 0.0f;
this->lastHumidityValue = 0.0f;
}
我仍然收到两个警告:
Member 'lastHumidityValue' was not initialized in this constructor Code Analysis Problem
Member 'lastTemperatureValue' was not initialized in this constructor Code Analysis Problem
我在构造函数的初始化列表中明确分配了这些变量的值。即使在构造函数主体中再次分配它们也无济于事。我读过类似的问题,但解决方案仍然给我以下警告。我的 C 编译器的版本是 gnu-C11 和 C++ 编译器的版本:gnu-C++14。
这里可能是什么情况?
编辑:传感器抽象类的定义:
class Sensor {
protected:
std::unique_ptr<GenericDriver> driver;
public:
Sensor() {};
virtual void startNewReadout(void) = 0;
};
创建 OneWireSensor 对象:
PinData sensor1Data = {GPIOA, GPIO_PIN_4};
OneWireSensor tempSensor1(&sensor1Data);
解决方案
推荐阅读
- junit - 在不同的测试方法中未返回预期值时的 Mockito
- c# - Azure 配置应用程序设置中的字典
- java - seekbar 在片段上指向 null 错误的进度
- flutter - 在 Flutter 的 ButtonBar 中添加 TextField
- c++ - 如何在 Windows 10 的自定义凭据提供程序中更改 LOCK 场景 CPUS_UNLOCK_WORKSTATION 条件下用户的域密码
- xml - 将 XML 转换为 AVRO - 带有封闭属性和元素值的 xml 元素
- ubuntu - 当我使用 client_body_temp_path 时,Linux(Ubuntu)和 Nginx 权限在另一个磁盘上
- vue.js - Vuejs:在 [__ob__: Observer] 中获取价值
- javascript - 反应本机 RNFetchBlob 创建文件未创建正确的文件
- c++ - 在这种情况下可以避免模板专业化吗?