FirstChildElem-6ren">
gpt4 book ai didi

c++ - TinyXML 抛出访问冲突

转载 作者:行者123 更新时间:2023-11-27 23:23:32 25 4
gpt4 key购买 nike

我最近开始使用 tinyXML。问题是当我运行我的程序来读取 xml 时,它返回一个访问冲突。一条共同的线是:

doc.FirstChildElement("Map")->FirstChildElement("Width")->GetText()

使用 visual studio 调试器,我确定它为“Map”返回 null,然后使用 null 引用来调用函数。

这是第一行代码和xml

XMLDocument doc;
doc.LoadFile(path.c_str());

int width = atoi(doc.FirstChildElement("Map")->FirstChildElement("Width")->GetText());

XML:

<?xml version="1.0"?>
<Master>
<Map>
<Width>5</Width>
<Height>5</Height>
<Layers>1</Layers>
<Tiles>
<Tile>
<Id>1</Id>
<Path>data/tiles/dirt-base.png</Path>
</Tile>
</Tiles>
<Data>
<DataLayer>1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1</DataLayer>
</Data>
</Map>
</Master>

需要注意的是,我本来没有根标签,但是当它不起作用时添加了它,但是添加它仍然没有帮助。任何帮助将不胜感激

最佳答案

改变

int width = atoi(doc.FirstChildElement("Map")->FirstChildElement("Width")->GetText());

int width = atoi(doc.FirstChildElement("Master")->FirstChildElement("Map")->FirstChildElement("Width")->GetText());

它在我的电脑上运行,使用最新的 tinyxml。

根据 TinyXml 文档

您应该首先检查 LoadFile 返回值

if (!_doc.LoadFile(filename))
{
printf("load file=[%s] failed\n", filename);
return -1;
}

然后检查元素是否存在以避免访问冲突。

使用 TiXmlHandle 来检查元素更容易。

TiXmlHandle docHandle(&doc);
TiXmlElement* child = docHandle.FirstChild("Map").FirstChild("Width").ToElement();
if (child)
{
// do something useful

关于c++ - TinyXML 抛出访问冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11112603/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com