【问题标题】:no matching function for call to 'std::vector<std.. '没有匹配函数调用'std::vector<std..'
【发布时间】:2020-05-29 14:44:14
【问题描述】:

我要解决的问题是:我必须采取 T 测试用例。对于每个测试用例,我必须将字符串作为输入,然后我需要将输入字符串排列为:偶数位置的字符串 {double space} 奇数位置的字符串(例如:input - StackOverflow,输出 - Sakvrlw tcOefo)。我编写了以下代码,其中我为所有测试用例获取输入并将其存储在向量中。然后我将 vector 的元素分配给另一个声明的 string s。

#include <cmath>
#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>
#include <string>
using namespace std;


int main() {
    /* Enter your code here. Read input from STDIN. Print output to STDOUT */
     int T,i;
     cout << "Enter no. of test cases: ";
     cin >> T;

     vector<string> v;
     vector<string> odd;
     vector<string> even;
     string str;

     for(int i=0; i<T; i++){
        cin >> str;
        v.push_back(str);
     }


     string s;

     for(i=0; i<v.size(); i++){
        s = v.at(i);

        for(i=0; i<s.size(); i++){
            if(i==0){
                even.push_back(s[i]);  //*This is where I am getting error*.
            }else if(i==1){
                odd.push_back(s[i]);
            }else{
                if(i%2==0){
                    even.push_back(s[i]);
                }else{
                    odd.push_back(s[i]);
                }
            }
        }

        for(i=0; i<even.size(); i++){
            cout << even.at(i);
        }

        cout << "  ";

        for(i=0; i<odd.size(); i++){
            cout << odd.at(i);
        }

        cout << endl;

        even.clear();
        odd.clear();
        s.clear();
     }


     return 0;
}


在编译上述代码时,我得到了"no matching error for call std::vector..."我到底做错了什么?

【问题讨论】:

  • even 是字符串的字符,s[i] 不是字符串。请在问题中包含完整的错误消息,它应该告诉您代码中有什么问题,如果您不理解它可以询问它的含义,但无论如何您应该将其包含在问题中
  • 您为什么不显示完整的错误消息 - 可以帮助我们帮助您的东西?
  • 如果这是 Visual Studio,请从“输出”选项卡中复制错误消息的文本。错误列表中的错误消息通常是缩写的,并且格式不适合复制/粘贴文本。

标签: c++ string loops vector c++14


【解决方案1】:

编译您的代码时出现以下错误:

main.cpp:34:36: error: no matching function for call to ‘std::vector &gt;::push_back(char&amp;)’.

这是因为evenvector&lt;string&gt;,而s[i]char。您正在尝试将 char 插入到字符串向量中,这是不可能的,因为它们是不同的类型。

如果我正确理解您的问题,evenodd 必须都是 vector&lt;char&gt;string不是 vector&lt;string&gt;

将声明更改为:

string odd;
string even;

这也可以让你替换打印:

for(i=0; i<even.size(); i++) {
    cout << even.at(i);
}

与:

cout << even;

【讨论】:

  • "这是不可能的,因为它们是不同的类型" - 更准确地说,这是不可能的,因为 std::string 没有接受单个 @ 的构造函数987654335@ 作为其唯一输入。但是您可以手动构造一个 std::string ,它包含一个 char 然后 push_back() 该字符串,例如:even.push_back(string(1, s[i]));even.push_back(string(&amp;s[i], 1));
【解决方案2】:

欢迎来到 Stack Overflow @Manish Jha,

所以s[i]char

sstd::stringchars 的数组

方法必须是push_back(std::string&amp;) 而不是push_back(std::char&amp;)

类模板方法std::vector::push_back(T&amp;) 在初始化偶数/奇数向量时有点“特殊”,因此,将std::string 附加到std::vector&lt;std::string&gt; 或将char 附加到std::vector&lt;char&gt;

否则,调用方法std::vector&lt;T&gt;::push_back(T&amp;)没有任何处理能力

希望我能正确回答您的等待,如果有任何错误,请通知我。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-19
    • 2021-05-05
    • 2020-07-06
    相关资源
    最近更新 更多