Так что я занимался этим несколько дней, и я понятия не имею, почему выдается ошибка BAD_ACCESS. Иногда это работает, иногда нет.
void xmlParser::parseXML(string file){
tinyxml2::XMLDocument doc;
if(!doc.LoadFile(file.c_str()))
{
cout << "ERROR: TINYXML2 FAILED TO LOAD" << endl;
}
//XML FILE LAYOUT:
//<item>
// <type id="laserWeapon" name="Laser Rifle">
// <tooltip>
// <stats>
//</item>
//error seems to occur on this line
tinyxml2::XMLElement* elementType = doc.FirstChildElement("item")->FirstChildElement("type");
string id = elementType->Attribute("id");
string name = elementType->Attribute("name");
cout << "id: " << id << endl;
cout << "name: " << name << endl;
}
я использую
xmlparser.parseXML (xmlparser.path + «laserRifle.xml»);
загрузить файл. Должен ли я анализировать это как строку, или есть какой-то нулевой ptr, которым я пренебрегаю? Я пытался сделать предложение if nullptr, но оно все равно выдает ошибку, а не пропускает ее.
Любой совет, что делать? Я полностью потерян с этим.
// item element can be missed and you'll get bad access. Do not chain your calls that way
tinyxml2::XMLElement* elementType = doc.FirstChildElement("item")->FirstChildElement("type");
// element type can be missed, as well as attributes id and name
string id = elementType->Attribute("id");
string name = elementType->Attribute("name");
cout << "id: " << id << endl;
cout << "name: " << name << endl;
}
Тщательно проверьте каждый элемент и атрибут. Не связывайте вызовы, потому что каждый вызов может возвращать ноль. Если вы проверите все случаи nullptr, вы найдете свою ошибку