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;
}
Идея:TinyXML не может сравнить Атрибут для полукокса
Итак, я хочу хранить информацию о предпочтении человека, если он хочет для игры, чтобы быть в полноэкранном режиме или оконными. Я создал эту функцию bool, которая проверяет, есть ли файл «videoSettings.xml» и возвращает информацию о предпочтениях пользователей. Если файл не существует, он будет создан при установке Fullscreen в 0 (что в основном означает, что игра будет окончена, и пользователь может изменить ее позже в настройках игры).
Часть, которая не работает:
if(*(fullscreen->Attribute("Fullscreen: ")) == '0')
return false;
После добавления этого две строки я получил ошибку сегментации (ядро сбрасывали).
Кажется, что это значение хранится как символ.
EDIT: Эти линии решают все :).
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.
Вы уверены, что сначала ваш код попадает в первый случай? Сначала попробуйте NULL case, затем попробуйте это, если случай – Thellimist
@ user140345: рад, что это помогло. Одна вещь, чтобы быть осторожным, хотя - если атрибут «fullscreen» не существует в вашем XML-документе, вызов атрибута «Атрибут» вернет значение null. Вы бы разыменовали nullptr в свой тест 'if (* child-> Attribute ...'), не забудьте проверить результат 'Attribute()', чтобы убедиться, что он действительный указатель перед разыменованием его для значения. – frasnian