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