我有点想在没有很多资源的Atmel ATtiny85上使用I²C。 因此,我为C ++中的RTC模块DS1307编写了自己的实现。 我的班级定义如下:
class DS1307 {
public:
DS1307();
~DS1307() = default;
uint8_t getSeconds();
private:
I2c i2c;
const uint8_t address = 0b1101000; // Datasheet
};
对应的构造函数实现是:
#include "DS1307.h"
DS1307::DS1307(): i2c(address) {
}
在尝试编译时,编译器抱怨:
src/DS1307.cpp: In member function 'DS1307::DS1307()':
src/DS1307.cpp:7:29: warning: 'this_4(D)->address' is used uninitialized in this function [-Wuninitialized]
DS1307::DS1307(): i2c(address) {
~~~~~~^~~~~~~
为什么?
我并不怀疑GCC的正确性,但是我认为这就是初始化私有字段的方式。
I2c
类将uint8_t
作为构造函数的唯一参数。
答案 0 :(得分:1)
我的两分钱:因为初始化列表的计算顺序与成员在类中出现的顺序相同。您可以尝试交换两条声明行,在I2C之前声明地址。
此外,在这样的小型设备上,将地址设为静态或使用预处理程序指令进行定义将更为有效。