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。
你确定首先你的代码输入第一个if case吗?首先尝试NULL情况,然后尝试这种情况下,如果案例 – Thellimist
@ user140345:很高兴它帮助。但要注意的一点是,如果XML文档中不存在属性“全屏”,则对“Attribute”的调用将返回null。你会在你的'if(* child-> Attribute ...'test)中解引用一个nullptr,确保测试'Attribute()'的结果以确保它是一个有效的指针,然后将它解除值为 – frasnian