为什么擦除C++映射类成员中的值?
Why are my values in a C++ map class member wiped?
我有2个类:InuReading
和InuTask
。看起来像这样:
犬读标题:
class InuReading{
public:
InuReading(String t, String l){
type = t;
label = l;
};
String type;
String label;
std::map<String, String> data;
void set(String key, float d);
};
InuTask 标头:
class InuTask{
public:
InuTask(String);
String type;
void addTemperatureReading(String sensor, float temperature);
std::vector<InuReading> readings;
private:
InuReading newReading(String t, String l);
};
犬读法:
void InuReading::set(String key, float d){
data[key] = String(d);
};
InuTask方法:
InuTask::InuTask(String t){
type = t;
}
InuReading InuTask::newReading(String t, String l){
InuReading r(t, l);
readings.push_back(r);
return r;
}
void InuTask::addTemperatureReading(String sensor, float temperature){
InuReading r = newReading("temperature", sensor);
r.set("d", temperature);
// Size here after setting "d" to 30.0 is 1, which is proper
Serial.printf("Size of %s is now: %i n", r.type.c_str(), r.data.size());
}
主要:
InuTask task("Log");
task.addTemperatureReading("Temperature", 30);
// This returns 0, all data is missing now?
Serial.println(task.readings[0].data.size());
在地图上设置数据后,它立即具有 1 个元素,但是一旦我从向量中获取 InuReading,它的数据属性就是空的。如何让数据保留在地图上?
newReading
按值返回InuReading
,这意味着addTemperatureReading
中的r
是本地对象,与存储在任务readings
向量中的对象没有任何关系。
您可能希望newReading
返回引用,并将addTemperatureReading
更改为使用引用:
void InuTask::addTemperatureReading(String sensor, float temperature){
InuReading &r = newReading("temperature", sensor);
r.set("d", temperature);
// Size here after setting "d" to 30.0 is 1, which is proper
Serial.printf("Size of %s is now: %i n", r.type.c_str(), r.data.size());
}
请注意,此更改还要求您从newReading
返回对readings
向量的引用:
InuReading& InuTask::newReading(String t, String l){
readings.push_back(InuReading(t, l);
return readings.back();
}
相关文章:
- 引用一个已擦除类型(void*)的指针
- 擦除while循环中迭代的元素
- 在运行时处理类型擦除的数据-如何不重新发明轮子
- C++擦除(如果存在)
- 在映射擦除c++期间执行循环的次数
- 为什么擦除方法会影响结束方法
- C++ 字符串类擦除成员函数的时空复杂性
- 如何在C++中允许成员函数的自定义返回类型进行类型擦除?
- C++ 根据成员函数从矢量中擦除对象
- 键入擦除成员函数指针的"right"方法是什么?
- 为什么擦除C++映射类成员中的值?
- C++ 向量::使用类对象迭代器擦除不擦除向量成员
- 从向量中擦除元素是否也会擦除元素中存在的所有成员向量
- 在C 17中,为什么关联容器具有``擦除''成员函数,该函数会采用(non-`const`)``iTerator'
- 从矢量擦除期间类成员会发生什么
- 类型擦除和可变模板成员函数
- 没有匹配的成员函数来调用"擦除"
- Vector::erase()也擦除结构体的成员向量
- 擦除 std::set 的最后一个成员
- std::list 的擦除成员函数是否为所有存储的元素调用析构函数?