error:-main.cpp:11:19:error:push_back行中没有用于调用的匹配函数



我一直在尝试执行这段代码,但我收到了一个错误:

main.cpp:11:19:错误:调用"std::vector<std::__cxx11::basic_string<char>>::push_back(__gnu_cxx::__alloc_traits<std::分配器<char>>:value_type&('v.push_back(s[2](
#include <iostream>
#include<vector>
using namespace std;
int main()
{
string s;
s="abc";
vector<string>v;
v.push_back(s[2]);
cout<<v[0];

return 0;
}

索引成这样的字符串:

s[2]

给您一个char,并且对于使用charvector<string>,没有push_back的过载。

相反,您可以像这样使用string的初始值设定项列表构造函数来传递包含单个字符的字符串:

v.push_back( { s[2] } );

s[2]是一个字符(类型为char(,因此它不能插入到接受string的向量中。

std::string的构造函数

basic_string( size_type count,
CharT ch,
const Allocator& alloc = Allocator() );

用于从一个字符创建字符串。

试试这个:

#include <iostream>
#include<vector>
using namespace std;
int main()
{
string s;
s="abc";
vector<string>v;
v.push_back(std::string(1, s[2]));
cout<<v[0];
return 0;
}

您正试图将单个char推送到std::string元素的std::vector中。std::string没有只接受单个char作为输入的构造函数(但它有一个接受输入的operator=(。

因此,您将不得不:

  • 更改std::vector以容纳char元素,而不是std::string元素:
#include <iostream>
#include <vector>
#include <string>
using namespace std;
int main()
{
string s = "abc";
vector<char> v;
v.push_back(s[2]);
cout << v[0];

return 0;
}
  • 更改构造要推入std::vectorstd::string对象的方式:
#include <iostream>
#include <vector>
#include <string>
using namespace std;
int main()
{
string s = "abc";
vector<string> v;
v.push_back(string(1, s[2]));
//
// or:
// v.push_back(string(&s[2], 1));
//
// or:
// string tmp;
// tmp = s[2];
// v.push_back(tmp);
cout << v[0];

return 0;
}

相关内容

最新更新