你好,我是编码的新手,很抱歉我可能有任何误解,看起来有多糟糕。我花了好几个小时来解决这个问题并且无法修复它。我有一个XMLItems向量和一个常量toString方法。当我尝试使用迭代器调用toString时,它什么都没打印出来。
string XMLParser::toStringInput() const
{
string inputret = "";
for(std::vector<XMLItem>::const_iterator iter = theInput.begin(); iter != theInput.end(); ++iter)
{
inputret += (*iter).toString();
}
return inputret;
}
这什么都不返回。我使用Iterator错了吗?我创建矢量时是否将字符串保存错误?这是XMLItem类中的toString
string XMLItem::toString() const
{
cout << this->theItem; //the item is a private string
return this->theItem;
}
这里我创建了矢量以防万一。
void XMLParser::readXML(Scanner& inStream)
{
string tmp = "";
string tag = "tag";
string data = "data";
XMLItem localxml = XMLItem();
while (inStream.hasNext())
{
string input = inStream.nextLine();
if(input.find("<") != std::string::npos)
{
XMLItem localxml = XMLItem(tag, input);
}
else
{
XMLItem localxml = XMLItem(data, input);
}
this->theInput.push_back(localxml);
}
}
答案 0 :(得分:0)
XMLItem localxml = XMLItem();
while (inStream.hasNext()) {
string input = inStream.nextLine();
if(input.find("<") != std::string::npos) {
XMLItem localxml = XMLItem(tag, input);
} else {
XMLItem localxml = XMLItem(data, input);
}
this->theInput.push_back(localxml);
}
在if
的块和else
的块中,您有一个名为localxml
的新本地(到相应的块)变量。它们影响while
循环之前定义的变量,保持不变。所以你基本上可以运行
theInput.push_back(XMLItem());
在那个循环里面。所以稍后,当您尝试将向量的元素转换为字符串时,这些“空”元素将被转换,可能会导致一些空字符串被连接。
要通过删除变量名前面的类型来修改该变量声明以进行赋值:
localxml = XMLItem(tag, input);