我的代碼看起來是這樣的:從一個類的成員函數返回一個指針
xmlparser.h文件:
#include <libxml++/libxml++.h>
#include <iostream>
using namspace std, xmlpp;
class xmlpar {
public:
xmlparse(){}
~xmlparse(){}
const Node* root_node();
};
xmlparser.cc文件:
#include "xmlparser.h"
const Node* xmlpar::root_node() {
const Node* rnode;
DomParser parser;
parser.parse_file("sample.xml");
if (parser) {
rnode = parser.get->document()->get_root_node();
cout << rnode->get_name(); // prints "component" as in xml file
return rnode;
}
}
我的主要.cc文件:
#include "xmlparser.h"
int main() {
xmlparser par;
const Node* root = par.root_node();
cout << root->get_name(); // prints "PQ". --> Problem location
}
我先編譯xmlparser.cc文件,然後編譯main.cc,然後用main.o和xmlparser.o創建一個可執行文件。編譯期間我沒有收到任何錯誤,但是在代碼中,如果我從方法root_node()返回rnode,則根 的值將更改爲「PQ」而不是「component」。任何人都可以告訴我這裏發生了什麼,以及相同的解決方案。
解決這個問題的方法是將'parser'變量變成類的成員變量,而不是函數的局部變量。如果稍後需要從同一個XML文件中獲取更多節點,這也會更好。 –
是的。或者也有2個輸出參數並使用'new'分配解析器。然後使用2個輸出參數返回分配的解析器和'rnode'。或者只是返回指向解析器的指針。 –
非常感謝Kiril。我明白了這個問題,它的工作.. – sundar