我不能从xml返回加载。以下是代码:
RapidXML xml加载器
vector<char*> ParseFanbeamGeometry(char* fileName)
{
xml_document<> doc;
xml_node<> * root_node;
// Read the xml file into a vector
ifstream theFile (fileName);
vector<char> buffer((istreambuf_iterator<char>(theFile)), istreambuf_iterator<char>());
buffer.push_back('\0');
// Parse the buffer using the xml file parsing library into doc
doc.parse<0>(&buffer[0]);
// Find our root node
root_node = doc.first_node("FanbeamGeometrySettings");
vector<char*> fambeamGeometry;
// Iterate over the fangeometry
for (xml_node<> * fanGeometry_node = root_node->first_node("FanGeometry"); fanGeometry_node; fanGeometry_node = fanGeometry_node->next_sibling())
{
try
{
fambeamGeometry.push_back(fanGeometry_node->first_attribute("geometry")->value());
fambeamGeometry.push_back(fanGeometry_node->first_attribute("D")->value());
}
catch (exception &e)
{
e.what();
}
}
return fambeamGeometry;
}主要功能
int _tmain(int argc, _TCHAR* argv[])
{
char* fangeofile = "D:\\Projects\\fanbeam\\tools\\rapidxml-1.13\\GeometrySettings.xml";
vector<char*> fambeamGeometry = ParseFanbeamGeometry(fangeofile);
float D = atof(fambeamGeometry[1])*N;
getchar();
return 0;
}xml文件
<?xml version="1.0"?>
<FanbeamGeometrySettings>
<FanGeometry geometry="EquiDistance" D="2"/>
</FanbeamGeometrySettings>fambeamGeometry正确地加载"EquiDistance“和"2",但是当从ParseFanbeamGeometry()返回到main时,这个值就变成了一些奇怪的值,比如-18和-2。
有什么建议吗?我不知道为什么。如何让xml加载器返回它加载的内容?谢谢。
发布于 2014-03-24 01:40:58
使用vector<std::string>代替
vector<char*> 然后,使用string.c_str()将string转换为
char*发布于 2014-03-25 14:34:24
您的函数ParseFanbeamGeometry正在返回指针向量,但是当函数返回时,一旦buffer被解构,它们所指向的数据将无效。
正确的方法,正如您已经意识到的,是将std::strings传回。这是C++中惯用的方法。
vector<std::string> ParseFanbeamGeometry(const std::string &fileName)https://stackoverflow.com/questions/22597492
复制相似问题