gpt4 book ai didi

c++ - TinyXML 无法将属性与字符进行比较

转载 作者:行者123 更新时间:2023-11-28 06:30:58 25 4
gpt4 key购买 nike

bool win::checkIfFScreen(sf::RenderWindow &window)
{
TiXmlDocument doc;
TiXmlElement * fullscreen;

if(!doc.LoadFile("videoSettings.xml"))
{
fullscreen = new TiXmlElement( "Window" );
fullscreen->SetAttribute("Fullscreen: ", 0);
doc.LinkEndChild( fullscreen );
fullscreen->Attribute("Fullscreen: ");

std::cout << typeid(*fullscreen->Attribute("Fullscreen: ")).name() << std::endl;
doc.SaveFile("videoSettings.xml");
return false;
}

if(*(fullscreen->Attribute("Fullscreen: ")) == '0')
return false;

return true;


}

想法:

所以,如果他希望游戏是全屏或窗口化的,我想存储有关个人偏好的信息。我创建了这个 bool 函数来检查是否有“videoSettings.xml”文件并返回有关用户首选项的信息。如果该文件不存在,将在全屏设置为 0 的情况下创建该文件(这基本上意味着游戏将是窗口化的,用户可以稍后在游戏设置中更改它)。

无效的部分:

if(*(fullscreen->Attribute("Fullscreen: ")) == '0')
return false;

添加这两行后,我遇到了段错误(核心已转储)。

该值似乎存储为 char。

编辑:这条线解决了一切:)。

TiXmlHandle docHandle ( &doc );
TiXmlElement *child = docHandle.FirstChild( "Window" ).ToElement();
if(child)
if(*child->Attribute("fullscreen") == '1')
return true;
else if(*child->Attribute("fullscreen") == '0')
return false;

谢谢@frasnian。

最佳答案

你的代码有这个:

TiXmlElement * fullscreen;  // not initialized to anything here

if(!doc.LoadFile("videoSettings.xml")) // LoadFile returns true on success
{
fullscreen = new TiXmlElement( "Window" ); // okay
...
return false;
}

// question: if doc.LoadFile() succeeds, what is this going to do-
if(*(fullscreen->Attribute("Fullscreen: ")) == '0')
return false;

在使用任何东西初始化之前,您正在使用全屏

编辑中回应评论中的问题:

如果加载文档成功,你需要获取根元素,如:

TiXmlElement* root = doc.FirstChildElement("Whatever");  // root element name
if (root){
TiXmlElement* el = root->FirstChildElement("Window"); // etc, etc,

当您将文档层次结构遍历到“Window”元素所在的位置时,使用 TiXmlElement::Attribute()TiXmlElement::QueryAttribute() 获取属性的值(如果存在)。

比使用 FirstChild/NextSibling 等(由 TiXmlNodeTiXmlElement 继承)遍历层次结构更好的方法可能是使用句柄。请参阅与 TiXmlHandle 相关的 TinyXML 文档 - 主文档页面有一个非常简单的示例。

作为旁注,应删除您发布的代码中属性名称后面的冒号(即 "fullscreen",而不是 "Fullscreen:")。

此外,这一行:

fullscreen->Attribute("Fullscreen: ");

在您调用 LinkEndChild() 之后不会执行任何操作。

关于c++ - TinyXML 无法将属性与字符进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27585049/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com