【问题标题】:Passing "vector<string>" as function argument and I get an error将“vector<string>”作为函数参数传递,我得到一个错误
【发布时间】:2019-03-04 14:13:38
【问题描述】:

我进一步实现了我的保存功能,并想到将我的参数作为“向量”(因为它们是)而不是“字符串”传递 这给出了这个:

void saveFunction(ofstream& save, vector<string> site, vector<string> url, vector<string> username, vector<string> password)
{
    save << site;
    save << url;
    save << username;
    save << password;

}

这给出了这个错误:

error: no match for 'operator&lt;&lt;' (operand types are 'std::ofstream' {aka 'std::basic_ofstream&lt;char&gt;'} and 'std::vector&lt;std::__cxx11::basic_string&lt;char&gt; &gt;')

【问题讨论】:

  • std::vector 没有 &lt;&lt; 运算符。如果您有std::vector&lt;Foo&gt;,您希望将什么写入save
  • 您希望save &lt;&lt; site; 做什么?
  • 我已经更改了标题,所以它看起来不像是关于右值引用。
  • 所以例如username是几个字符串?至少命名错误,可能设计错误
  • 你需要一个 struct 字段为 siteurlusernamepassword,然后将 const 引用传递给该结构的向量,而不是 4 个单独的向量跨度>

标签: c++ vector ofstream


【解决方案1】:

ofstream 没有用于 std::vector 的重载 &lt;&lt; 运算符,因此您需要自己滚动一个,例如

for (auto&& s : username){
    save << s;
}

尽管您使用 std::vector 的原因可能值得怀疑。

【讨论】:

  • 您好,非常感谢您的快速解答!但是,我不明白我应该如何使用它......(我是2天前开始的初学者)
  • @Solar:很高兴,这就是我们喜欢在这个网站上摇滚的方式。
  • for (auto&amp;&amp; s : username){ 是一个基于范围的 for 循环,用于遍历容器。看看这个底部的例子:en.cppreference.com/w/cpp/language/range-for
  • @Solar 作为初学者,您可能想获取good book 来帮助您学习。
  • @Bathsheba “快速行动,打破常规”——当它是其他人的事情时,一切都很好;)
猜你喜欢
  • 2013-01-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-07
相关资源
最近更新 更多