如何在迭代器c ++上调用toString

时间:2015-09-23 16:31:28

标签: c++ vector tostring

你好,我是编码的新手,很抱歉我可能有任何误解,看起来有多糟糕。我花了好几个小时来解决这个问题并且无法修复它。我有一个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);
}
}

1 个答案:

答案 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);