【问题标题】:Compilation error using string::pop_back() [closed]使用 string::pop_back() 编译错误 [关闭]
【发布时间】:2018-12-11 23:38:33
【问题描述】:

我正在尝试删除字符串的最后一个字符。由于我使用的是 c++11,所以我使用的是pop_back():

std::string ipAddresses = response.substr(response.find_first_of(",")+1);
responseVector.push_back( ipAddresses.pop_back() );

由于某种原因,我收到编译错误:

 error: invalid use of void expression
 responseVector.push_back( ipAddresses.pop_back() );

谁能告诉我如何解决这个问题?

【问题讨论】:

  • pop_back 不返回弹出的项目。你需要先调用 back() 然后弹出它。
  • pop_back() 返回void
  • 您正在尝试做两件事。获取最后一个字符,并删除最后一个字符。但是 pop_back 只做这些事情之一。
  • ipAddresses.pop_back() 返回无效。再次查看参考。 'void' 的 push_back 到 responseVector 是错误的。
  • 一般提示:cplusplus.com 被认为是劣等资源...

标签: c++ string c++11 substring stdstring


【解决方案1】:

您需要分两步完成:

responseVector.push_back( ipAddresses.back() );
ipAddresses.pop_back();

【讨论】:

  • 这似乎没有解决 OP 的问题
  • 为什么不呢?它修复了 OP 的编译问题并保留了想要的功能。
  • @Sailanarmo 恰恰相反,它似乎很好地解决了 OP 的问题。
  • 如果函数void v()bool push_back(char) 一起使用,如下所示:push_back(v()); 它将失败并显示警告。这就是 OP 正在做的事情,也是 Adrian W 所要解决的问题。
【解决方案2】:

您可以尝试一些简单的方法来删除 string 的最后一个字符:

const size_t length(ipAddresses.length());
if (length > 0)
{
  ipAddresses.erase((length - 1), 1);
}

以上代码获取字符串的长度。
如果字符串至少有一个字符,则删除最后一个字符。
注意,位置是从0开始的,因此是减1。

【讨论】:

  • 你不能用std::string初始化size_t。那应该是 const size_t length(ipAddresses.length()); 或者,更多的 C++1x-ish auto const length(ipAddresses.length());erase()count 参数可以省略,因为默认值会擦除到字符串的末尾。
  • 好收获!错过了length 方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多