如何解决从当前班级内部库中的班级实例化成员?
我觉得这里缺少明显的东西,需要指出。 我试图创建一个结构实例,该实例是包含在当前文件中但包含在我定义的类中的类中的类的成员。如果我在类外部执行此操作,则可以正常工作,但在类内部,它似乎试图实例化该结构,就好像它是其所在父类的成员一样。
该库用于BME280传感器,该结构用于将芯片设置传递给驱动该传感器的主类的构造函数。甚至不确定该如何措辞,但希望代码能说明我要说的话。
如果我在类外实例化此结构,则可以正常工作
#include <BME280I2C.h>
// BME280 sensor settings
BME280I2C::Settings settings(
BME280::OSR_X16,BME280::OSR_X16,BME280::Mode_Forced,BME280::StandbyTime_1000ms,BME280::Filter_Off,BME280::SpiEnable_False,BME280I2C::I2CAddr_0x76 // I2C address. I2C specific.
);
class UsermodBME280 : public Usermod {
private:
BME280I2C bme(settings);
};
但是,如果我尝试在该类中执行此操作,似乎会尝试实例化该结构,就好像它是UsermodBME280
类本身的成员一样。
#include <BME280I2C.h>
class UsermodBME280 : public Usermod {
private:
// BME280 sensor settings
BME280I2C::Settings settings(
BME280::OSR_X16,BME280I2C::I2CAddr_0x76 // I2C address. I2C specific.
);
BME280I2C bme(settings);
};
IntelliSense说明了我的意思: https://i.stack.imgur.com/14ql5.png
我可以这样做吗?如果是这样,我在做什么错了?
解决方法
是的,可以默认初始化成员,尽管在C ++标准中,类内初始化只能使用=
或{}
。最好回答here。
使用括号令人困惑,因为它看起来像一个函数声明。
IntelliSense最有可能抱怨错误类型,因为它认为您声明的函数的类型无效且返回类型为BME280I2C::Settings
(假设您提供的设置值是值而不是类型)。
假设存在一个非显式构造函数(请注意从()
到{}
的更改),初始化看起来像这样
#include <BME280I2C.h>
class UsermodBME280 : public Usermod {
private:
// BME280 sensor settings
BME280I2C::Settings settings{
BME280::OSR_X16,BME280::OSR_X16,BME280::Mode_Forced,BME280::StandbyTime_1000ms,BME280::Filter_Off,BME280::SpiEnable_False,BME280I2C::I2CAddr_0x76 // I2C address. I2C specific.
};
BME280I2C bme{settings};
};
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。