我正在重写一个项目,以便它使用 getter 和 setter 来引用 TiXmlElement *'s 但是,我很快遇到了似乎与调试模式有关的问题:
摘自我班的标题:
TiXmlElement *_rootElement;
TiXmlElement *_dialogsElement;
TiXmlElement *_dialogElement;
TiXmlDocument _document;
void setDocument (TiXmlDocument doc) { this->_document = doc; }
void setRootElement (TiXmlElement * element) { this->_rootElement = element; }
void setDialogsElement (TiXmlElement * element) { this->_dialogsElement = element; }
TiXmlDocument getDocument () { return this->_document; }
TiXmlElement* getRootElement () { return this->_rootElement; }
TiXmlElement* getDialogsElement () { return this->_dialogsElement; }
类构造函数的摘录:
DCXML::DCXML(const char *dialogMark,const char *dialogName,TiXmlDocument doc) {
...
this->setDocument(doc);
this->setRootElement(this->getDocument().FirstChildElement("dcxml"));
this->setDialogsElement(this->getRootElement()->FirstChildElement("dialogs"));
实例化类的摘录:
TiXmlDocument doc(input.gettok(2,"\"").to_chr());
bool dcxmlFile = doc.LoadFile();
...
DCXML *dcxml = new DCXML(input.gettok(2).to_chr(),input.gettok(3).to_chr(),doc);
现在是奇怪的部分。这工作直到
this->setDialogsElement(this->getRootElement()->FirstChildElement("dialogs"));
在构造函数中。
->FirstChildElement("dialogs") 在调试模式下在 VS2008 中抛出“CXX0039: Error: symbol is ambiguous”错误。
奇怪的部分是 IntelliSense 采用了 FirstChildElement 方法,并且编译器不会抛出任何错误。
更奇怪的是,在发布模式下,它只是默默地无法获取对话框元素。
我做错了什么?或者,如果您已经成功地为 TiXmlElement* 实现了 getter setter 包装器,请告诉我该怎么做!
完整参考这里是 XML 文件的摘录:
<?xml version="1.0" encoding="utf-8"?>
<dcxml>
<dialogs>
<dialog
name="mediaplayer"
center=""
w="300"
h="400"
caption="Mamp 4.0 BETA"
border="btmnzy">
</dialog>
</dialogs>
</dcxml>
反馈将不胜感激,因为我处于死胡同:)