【问题标题】:error:- main.cpp:11:19: error: no matching function for call in the push_back line错误:- main.cpp:11:19:错误:push_back 行中没有匹配的调用函数
【发布时间】:2021-01-20 15:29:28
【问题描述】:

我一直在尝试执行此代码,但出现错误:

main.cpp:11:19: 错误:没有匹配函数调用 'std::vector<:__cxx11::basic_string> >::push_back(__gnu_cxx::__alloc_traits<:allocator> > ::值类型&)' 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;
}

【问题讨论】:

  • 你想让这段代码做什么?您有一个字符串向量,并且您正在尝试将单个字符推送到它。这不起作用。
  • 你想要完成什么?你忘了告诉我们代码应该做什么。
  • 这只是我试图运行的程序的一小段代码,我有一个条件,我必须在向量中存储一些字符和字符串,这不接受一个你指定的字符,谢谢!!

标签: c++ vector


【解决方案1】:

像这样对字符串进行索引:

s[2]

给你一个char,并且push_back 没有过载vector&lt;string&gt; 需要一个char

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

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

【讨论】:

    【解决方案2】:

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

    constructor of 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;
    }
    

    【讨论】:

      【解决方案3】:

      您正试图将单个 char 推送到 std::vectorstd::string 元素中。 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::string 对象的方式,并将其推送到 std::vector
      #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;
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-05-05
        • 2018-12-05
        • 2013-05-05
        • 2012-12-28
        • 2015-03-31
        • 1970-01-01
        相关资源
        最近更新 更多