转换yaml cpp中的用户数据类型

转换yaml cpp中的用户数据类型,yaml,yaml-cpp,Yaml,Yaml Cpp,这是以下教程中的示例: 有这样一类: struct Vec3 { double x, y, z; bool operator==(Vec3& other) const { return other.x == this->x && other.y == this->y && other.z == this->z;}}; 此代码用于将yaml数据转换为用户对象(Vec3): 名称空间YAML{ 模板 结构转换{ 静态布尔解码(常量节点和节点

这是以下教程中的示例: 有这样一类:

struct Vec3 { double x, y, z; bool operator==(Vec3& other) const { return other.x == this->x && other.y == this->y && other.z == this->z;}};
此代码用于将yaml数据转换为用户对象(
Vec3
):

名称空间YAML{
模板
结构转换{
静态布尔解码(常量节点和节点、Vec3和rhs){
如果(!node.IsSequence()| | node.size()!=3){
返回false;
}
rhs.x=节点[0].as();
rhs.y=节点[1].as();
rhs.z=节点[2].as();
返回true;
}
};
}
现在我测试它:

YAML::Node node = YAML::Load("start: [1, 3, 0]");
Vec3 v = node["start"].as<Vec3>();
YAML::Node Node=YAML::Load(“开始:[1,3,0]”);
Vec3 v=node[“start”].as();
但我有一个错误:

In file included from /usr/local/include/yaml-cpp/yaml.h:17:0,
                 from /home/ken/ClionProjects/First/yaml-cpp/first_yaml.cpp:5:
/usr/local/include/yaml-cpp/node/impl.h: In instantiation of ‘T YAML::as_if<T, void>::operator()() const [with T = Vec3]’:
/usr/local/include/yaml-cpp/node/impl.h:146:31:   required from ‘T YAML::Node::as() const [with T = Vec3]’
/home/ken/ClionProjects/First/yaml-cpp/first_yaml.cpp:52:37:   required from here
/usr/local/include/yaml-cpp/node/impl.h:122:7: error: no matching function for call to ‘Vec3::Vec3()’
     T t;
       ^
/home/ken/ClionProjects/First/yaml-cpp/first_yaml.cpp:14:5: note: candidate: Vec3::Vec3(double, double, double)
     Vec3(double a, double b, double c){
     ^
/home/ken/ClionProjects/First/yaml-cpp/first_yaml.cpp:14:5: note:   candidate expects 3 arguments, 0 provided
/home/ken/ClionProjects/First/yaml-cpp/first_yaml.cpp:12:8: note: candidate: constexpr Vec3::Vec3(const Vec3&)
 struct Vec3 {
        ^
/home/ken/ClionProjects/First/yaml-cpp/first_yaml.cpp:12:8: note:   candidate expects 1 argument, 0 provided
/home/ken/ClionProjects/First/yaml-cpp/first_yaml.cpp:12:8: note: candidate: constexpr Vec3::Vec3(Vec3&&)
/home/ken/ClionProjects/First/yaml-cpp/first_yaml.cpp:12:8: note:   candidate expects 1 argument, 0 provided
CMakeFiles/First.dir/build.make:62: recipe for target 'CMakeFiles/First.dir/yaml-cpp/first_yaml.cpp.o' failed
在/usr/local/include/yaml cpp/yaml.h:17:0中包含的文件中,
from/home/ken/ClionProjects/First/yaml cpp/First_yaml.cpp:5:
/usr/local/include/yaml cpp/node/impl.h:在“T yaml::as_if::operator()()const[with T=Vec3]”的实例化中:
/usr/local/include/yaml cpp/node/impl.h:146:31:必须来自'T yaml::node::as()const[with T=Vec3]'
/home/ken/ClionProjects/First/yaml cpp/First_yaml.cpp:52:37:从这里开始需要
/usr/local/include/yaml cpp/node/impl.h:122:7:错误:调用“Vec3::Vec3()”时没有匹配的函数
T;
^
/home/ken/ClionProjects/First/yaml cpp/First_yaml.cpp:14:5:注:候选人:Vec3::Vec3(double,double,double)
Vec3(双a、双b、双c){
^
/home/ken/ClionProjects/First/yaml cpp/First_yaml.cpp:14:5:注意:候选人需要3个参数,提供0个参数
/home/ken/ClionProjects/First/yaml cpp/First_yaml.cpp:12:8:注:候选者:constexpr Vec3::Vec3(const Vec3&)
结构向量3{
^
/home/ken/ClionProjects/First/yaml cpp/First_yaml.cpp:12:8:注意:候选者需要1个参数,提供0个参数
/home/ken/ClionProjects/First/yaml cpp/First_yaml.cpp:12:8:注:候选者:constexpr Vec3::Vec3(Vec3&&)
/home/ken/ClionProjects/First/yaml cpp/First_yaml.cpp:12:8:注意:候选者需要1个参数,提供0个参数
CMakeFiles/First.dir/build.make:62:目标“CMakeFiles/First.dir/yaml cpp/First_yaml.cpp.o”的配方失败

如何正确转换数据类型?

您实际使用的是
Vec3
的定义吗?错误消息表明您需要
Vec3
的默认构造函数,它只找到
Vec3(double,double,double)
(加上复制/移动)

如果定义了一个接受三个double的构造函数,那么还需要定义一个接受零参数的构造函数

In file included from /usr/local/include/yaml-cpp/yaml.h:17:0,
                 from /home/ken/ClionProjects/First/yaml-cpp/first_yaml.cpp:5:
/usr/local/include/yaml-cpp/node/impl.h: In instantiation of ‘T YAML::as_if<T, void>::operator()() const [with T = Vec3]’:
/usr/local/include/yaml-cpp/node/impl.h:146:31:   required from ‘T YAML::Node::as() const [with T = Vec3]’
/home/ken/ClionProjects/First/yaml-cpp/first_yaml.cpp:52:37:   required from here
/usr/local/include/yaml-cpp/node/impl.h:122:7: error: no matching function for call to ‘Vec3::Vec3()’
     T t;
       ^
/home/ken/ClionProjects/First/yaml-cpp/first_yaml.cpp:14:5: note: candidate: Vec3::Vec3(double, double, double)
     Vec3(double a, double b, double c){
     ^
/home/ken/ClionProjects/First/yaml-cpp/first_yaml.cpp:14:5: note:   candidate expects 3 arguments, 0 provided
/home/ken/ClionProjects/First/yaml-cpp/first_yaml.cpp:12:8: note: candidate: constexpr Vec3::Vec3(const Vec3&)
 struct Vec3 {
        ^
/home/ken/ClionProjects/First/yaml-cpp/first_yaml.cpp:12:8: note:   candidate expects 1 argument, 0 provided
/home/ken/ClionProjects/First/yaml-cpp/first_yaml.cpp:12:8: note: candidate: constexpr Vec3::Vec3(Vec3&&)
/home/ken/ClionProjects/First/yaml-cpp/first_yaml.cpp:12:8: note:   candidate expects 1 argument, 0 provided
CMakeFiles/First.dir/build.make:62: recipe for target 'CMakeFiles/First.dir/yaml-cpp/first_yaml.cpp.o' failed