错误:没有匹配函数调用‘std::vector<std::__cxx11::basic_string<char> >::push_back(int&)’

Posted

技术标签:

【中文标题】错误:没有匹配函数调用‘std::vector<std::__cxx11::basic_string<char> >::push_back(int&)’【英文标题】:error: no matching function for call to ‘std::vector<std::__cxx11::basic_string<char> >::push_back(int&)’ 【发布时间】:2018-12-05 21:13:28 【问题描述】:

我是 C++ 新手。当我运行我的代码时出现此错误:(

Big Sorting.cpp:在函数“int main(int, const char**)”中: Big Sorting.cpp:13:22:错误:没有匹配函数调用‘std::vector >::push_back(int&)’ v.push_back(m); ^ 在 /usr/include/c++/8.1.1/vector:64 包含的文件中, 来自 Big Sorting.cpp:2: /usr/include/c++/8.1.1/bits/stl_vector.h:1074:7: 注意:候选:'void std::vector<_tp _alloc>::push_back(const value_type&) [with _Tp = std::__cxx11::basic_string; _Alloc = std::allocator >;标准::向量<_tp _alloc>::value_type = std::__cxx11::basic_string]’ push_back(const value_type& __x) ^~~~~~~~~ /usr/include/c++/8.1.1/bits/stl_vector.h:1074:7:注意:没有已知的参数 1 从“int”到“const value_type&”的转换aka 'const std::__cxx11::basic_string&' /usr/include/c++/8.1.1/bits/stl_vector.h:1090:7: 注意:候选:'void std::vector<_tp _alloc>::push_back(std::vector<_tp _alloc>::value_type&&) [with _Tp = std::__cxx11::basic_string; _Alloc = std::allocator >; std::vector<_tp _alloc>::value_type = std::__cxx11::basic_string]’ push_back(value_type&& __x) ^~~~~~~~~ /usr/include/c++/8.1.1/bits/stl_vector.h:1090:7:注意:没有已知的参数 1 从“int”到 'std::vector >::value_type&&' aka 'std::__cxx11::basic_string&&'

这是我的代码

#include <iostream>
#include <vector>
#include <algorithm>

int main(int argc, char const *argv[]) 
    std::vector<std::string> v;

    int n, m;
    std::cin >> n;
    for (size_t i = 0; i < n; i++) 
        std::cin >> m;
        v.push_back(m);
    
    sort(v.begin(), v.end());
    for(int i = 0; i < v.size(); i++)
        std::cout << v[i] << '\n';
    
    return 0;

【问题讨论】:

m 是一个整数。您不能将 int 放入字符串向量中。 赞成,因为您包含了整个错误消息。 顺便说一句,包括&lt;string&gt; 啊,模板错误消息的麻烦... 特别糟糕,因为错误比您的代码大得多...... 【参考方案1】:

您正在阅读 int 变量 m 并尝试将其放入字符串向量中。你应该改用std::vector&lt;int&gt;

底线:您的代码只需要一项更改,最合理的一项是将std::vector&lt;std::string&gt; 更改为std::vector&lt;int&gt;

【讨论】:

或者在推送之前将int 转换为std::string 或者将m声明为std::string,这可能是作者的本意。 我尝试将字符串转换为 int,然后出现此错误“在抛出 'std::out_of_range' 的实例后调用终止 what(): stoi Aborted (core dumped)” @JeJo 我根据您的建议编辑了我的代码,但这里仍然出错 看看我的代码 #include <iostream> #include <vector> #include <algorithm> #include <string> int main(int argc, char const *argv[]) std::vector<:string> v;标准::字符串米;诠释n;大小_t s;标准::cin &gt;&gt; n; for (size_t i = 0; i &gt; m; v.push_back(std::stoi(m, &amp;s)); 排序(v.begin(),v.end()); for(int i = 0; i </:string></string></algorithm></vector></iostream> @Riajulkashem 您只需将int m 更改为string m。只有这样你才能做到push_back(m)

以上是关于错误:没有匹配函数调用‘std::vector<std::__cxx11::basic_string<char> >::push_back(int&)’的主要内容,如果未能解决你的问题,请参考以下文章

错误:没有匹配函数调用‘std::vector<std::__cxx11::basic_string<char> >::push_back(int&)’

错误:没有用于调用'variable'的匹配函数

创建函数变体向量时出现“调用没有匹配函数”错误

没有匹配函数调用‘std::vector::push_back(std::string&)’

当我尝试从 main 调用我的类模板函数时出现错误

没有匹配的函数调用奇怪的错误