我在使用yaml-cpp解析yaml文件时遇到了问题,我正在使用wxWidgets开发一个应用程序,并尝试从yaml文件中读取帧大小,如下所示:
---
This is the configuration file for the Sample Browser,
feel free to edit this file as needed
...
Window:
SizeW: 1280
SizeH: 720
Media:
Autoplay: false这是应该处理解析的代码,
int sizeH, sizeW;
try
{
YAML::Node config = YAML::LoadFile("/home/apoorv/repos/cpp-projects/wxWidgets/SampleBrowser/build/config.yaml");
if (!config["Window"])
{
wxLogDebug("Error! Cannot fetch values.");
}
sizeH = config["SizeH"].as<int>();
sizeW = config["SizeW"].as<int>();
}
catch(const YAML::ParserException& ex)
{
std::cout << ex.what() << std::endl;
}
this->SetSize(sizeW, sizeH);但是当我尝试解析这个文件并设置帧大小this->SetSize()时,它错误地显示为*** Caught unhandled unknown exception; terminating。
发布于 2021-02-01 05:22:59
由于SizeH和SizeW是Window的子代,因此您的两行代码应该如下所示
sizeH = config["Window"]["SizeH"].as<int>();
sizeW = config["Window"]["SizeW"].as<int>();或者,与先前的检查合并,
if (auto window = config["Window"]) {
sizeH = window["SizeH"].as<int>();
sizeW = window["SizeW"].as<int>();
} else {
wxLogDebug("Error! Cannot fetch values.");
}一般来说,错误处理是不好的。在您的代码中,如果遇到错误,则不会设置sizeH和sizeW,但仍会将它们提供给SetSize。这是未定义的行为。你应该用一些默认值来初始化它们,例如
int sizeH = 480, sizeW = 640;此外,由于您对this是什么一无所知,因此可能还会有其他错误。
发布于 2021-02-03 02:25:26
尝试这样做是为了学习yaml-cpp,但是如果你真的想保存/恢复你的框架几何图形,你应该使用wxPersistentTLW代替。要使用它,只需在创建框架后调用wxPersistentRegisterAndRestore(frame, "NameToIdentifyYourFrame"),请参阅the manual了解更多详细信息。
发布于 2021-02-01 05:45:41
在跨平台环境中,最好保存窗口的客户端大小,因为对于GTK来说,重要的是客户端大小。可能还有其他操作系统/工具包就是这种情况。
https://stackoverflow.com/questions/65983991
复制相似问题