在处理YAML文件时,经常会遇到各种编译报错问题,以下是一些常见的YAML编译报错及其解决方法:
1、缩进错误

示例:
level1: value1
level2: value2
解决方法:确保所有缩进都使用空格而不是制表符,并且每个层级的缩进保持一致。
正确示例:
level1: value1

level2: value2
2、冒号后缺少空格
示例:
key:value
解决方法:在冒号后添加一个空格。
正确示例:

key: value
3、引号使用不当
示例:
string: 'This is an unclosed string
解决方法:确保所有的引号都是成对出现的。
正确示例:
string: "This is a properly quoted string"
4、错误的换行
示例:key: value\r
解决方法:确保文件使用正确的换行符(LF)。
正确示例:key: value
5、不支持的字符编码
示例:key: value�
解决方法:确保文件保存为UTF8编码。
正确示例:key: value
6、文档开头缺少分隔符
示例:document1: value1document2: value2
解决方法:在每个文档的开头和结尾添加分隔符。
正确示例:
document1: value1
document2: value2
7、链接错误或找不到符号
示例:在Ubuntu20.04系统中使用yamlcpp0.7.0和gCC9.4.0进行CMake编译时遇到的链接错误和运行时Segmentation fault问题。
解决方法:通过在源代码中添加#define YAML_CPP_STATIC_DEFINE解决了编译问题,但后来发现真正的问题源头是Open3D的版本导致的冲突,更新Open3D到v0.16.0并重新编译安装后,问题得到解决。
8、未定义的引用
示例:/usr/bin/ld: CMakeFiles/test_yaml.dir/test/read_yaml.cpp.o: in functionmain': /home/kin/workspace/EDOMap/test/read_yaml.cpp:14: undefined reference to
YAML::LoadFile(std::string const&)'
解决方法:下载0.5.1版本的yamlcpp,把之前安装的yaml删掉,重新编译安装,同时注意要编写正确的CMakeLists.txt,将yaml库链接到程序中即可。
FAQs
1、如何处理YAML文件中的缩进错误?
确保所有缩进都使用空格而不是制表符,并且每个层级的缩进保持一致。
2、如果忘记在键和值之间添加空格怎么办?
在冒号后面添加一个空格即可。