TinyXML无法将属性与字符进行比较
TinyXML cant compare Attribute to the char
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;
}
想法:
因此,如果他希望游戏全屏或窗口化,我想存储有关人员偏好的信息。我创建了这个布尔函数,用于检查是否存在"videoSettings.xml"文件并返回有关用户首选项的信息。如果文件不存在,则会在全屏设置为 0 的情况下创建该文件(这基本上意味着游戏将被窗口化,用户稍后可以在游戏设置中更改它(。
不起作用的部分:
if(*(fullscreen->Attribute("Fullscreen: ")) == '0')
return false;
添加这两行后,我遇到了分段错误(核心转储(。
似乎该值存储为字符。
编辑:这条线解决了:)的一切.
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;
在用任何内容初始化之前,您正在使用fullscreen
。
编辑时在评论中回答问题时:
如果加载文档成功,则需要获取如下所示的根元素:
TiXmlElement* root = doc.FirstChildElement("Whatever"); // root element name
if (root){
TiXmlElement* el = root->FirstChildElement("Window"); // etc, etc,
将文档层次结构遍历到"Window"元素所在的任何位置后,请使用TiXmlElement::Attribute()
或TiXmlElement::QueryAttribute()
获取属性的值(如果存在(。
比使用 FirstChild/NextSibling 等(由 TiXmlElement
从 TiXmlNode
继承(遍历层次结构更好的方法可能是使用句柄。 请参阅与TiXmlHandle
相关的TinyXML文档 - 主文档页面有一个非常简单的示例。
作为旁注,应删除已发布代码中属性名称后面的冒号(即 "fullscreen"
,而不是"Fullscreen:"
(。
另外,这一行:
fullscreen->Attribute("Fullscreen: ");
在您调用LinkEndChild()
后立即执行任何操作。
相关文章:
- 比较字符数组
- 比较 c++ 中的字符数组
- 将 if 语句中的字符与 or 进行比较
- 将字符串字节与字符 c++ 进行比较
- 比较"A"、"C"、"G"'T'字符的最快方法
- 如何将字符串字符与结构数组进行比较?
- 字符* 与uint8_t的字符串比较
- 如何将32位字符与内联assembelyc++中的32位字符进行比较
- 如何比较文件中包含的下一个字符
- C++相互比较字符
- 为什么我不能将字符与"*"进行比较?
- 查找和比较两个字符串中的字符
- 将字符比较在一起
- 在数组、流和字符比较中定位
- 字符比较 if 语句无法正常工作
- c++中数字字符和字母字符之间的字符比较
- 字符比较错误
- 字符串,c++中的字符比较
- C++字符串和字符比较
- 根据每个字符比较同一数组中的两个字符串值.此结果仅显示Last OUT值的原因