/home/admin/Developments/HIK Inspire V2.0/Common/include/writing_network_nljson.h:229: error: ambiguous overload for ‘operator=’ (operand types are ‘std::vector<SW_PT>’ and ‘const value_type’ {aka ‘const nlohmann::basic_json<>’}) obj.m_vec = j.at("vec"); ^
时间: 2024-02-17 17:04:41 浏览: 25
这个错误信息提示了在第 229 行使用了一个含糊不清的 `operator=`,其中一个操作数的类型为 `std::vector<SW_PT>`,而另一个操作数的类型为 `const nlohmann::basic_json<>`(即 `value_type` 的别名)。
根据错误信息,我们可以推断出 `m_vec` 是一个 `std::vector<SW_PT>` 类型的成员变量,而 `j.at("vec")` 返回的是一个 `nlohmann::basic_json<>` 类型的对象,编译器不知道如何将这个对象赋值给 `std::vector<SW_PT>` 类型的变量。
可能的原因是在 `std::vector<SW_PT>` 类型和 `nlohmann::basic_json<>` 类型之间没有定义任何转换函数或者类型转换构造函数,因此编译器无法自动地将一个类型转换为另一个类型。
解决这个问题的方法是手动将 `nlohmann::basic_json<>` 类型的对象转换为 `std::vector<SW_PT>` 类型,例如:
```cpp
obj.m_vec.clear();
for (const auto& elem : j.at("vec")) {
obj.m_vec.emplace_back(elem.get<SW_PT>());
}
```
这里,我们遍历 `j.at("vec")` 中的每个元素,使用 `get<SW_PT>()` 函数将它转换为 `SW_PT` 类型,并将转换后的对象添加到 `m_vec` 中。注意,在这之前需要先清空 `m_vec`,以避免可能的内存泄漏或者数据重复。