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은 문자에 속성 비교할 어차피
그래서, 내가 사람의 취향에 대한 정보를 저장 싶어. "videoSettings.xml"파일이 있는지 확인하고 사용자 기본 설정에 대한 정보를 반환하는이 bool 함수를 만들었습니다. 파일이 존재하지 않으면 Fullscreen을 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. 그것은 아무것도 초기화하기 전에 fullscreen
를 사용하는
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;
:
첫 번째 경우에는 코드가 먼저 입력해야합니까? 먼저 NULL 사례를 시도한 다음이 경우를 시도하십시오. – Thellimist
@ user140345 : 도움이 되었으면 좋겠습니다. 한 가지주의해야 할 점은, XML 문서에 "fullscreen"속성이 없다면, 'Attribute'를 호출하면 null이 반환된다는 것입니다. 당신은'if (* child-> Attribute ...'테스트에서 nullptr를 참조 해제 할 것입니다. 값을 역 참조하기 전에'Attribute()'의 결과를 테스트하여 반드시 올바른 포인터인지 확인하십시오. – frasnian