“错误:没有匹配的函数调用'push_back(char [6])”。如何解决此代码中的错误?

时间:2019-07-18 14:01:07

标签: c++ vector

我想在矢量中存储字符。但是当我想回退匹配的字符时,它不起作用。

此行显示错误-

v.push_back(arithmetic_operator[i]);

整个代码是-

#include<bits/stdc++.h>
using namespace std;

int main()
{
    vector<char>v;

    char str[100];
    gets(str);

    char *ptr;
    ptr = strtok(str, " ");

    char arithmetic_operator[6][6] = {"+", "-", "*", "/", "%", "="};

    while(ptr !=NULL)
    {   
        // arithmetic operator
        for(int i=0; i<sizeof(arithmetic_operator); i++){
            if(strcmp(arithmetic_operator[i], ptr) == 0)
            {
                v.push_back(arithmetic_operator[i]);
            }
            else
            {
                continue;
            }
        }

        ptr = strtok(NULL, " ");
    }

    for (auto it = v.begin(); it != v.end(); it++)
    {
        cout << *it << " ";
    }

    return 0;
}

当输入为a = b + c时, 预期的输出将是=,+

2 个答案:

答案 0 :(得分:3)

#include<bits/stdc++.h>

没有。决不。从来没有。不要这样做,要非常谨慎地对待显示该代码的示例代码(最好忽略它,找到不垃圾的东西)。

vector<char>v;
v.push_back(...);

documentation for push_back表明vector<char>将期望使用char作为参数。

char arithmetic_operator[6][6] = {"+", ... };

但是显然arithmetic_operator[i]就像一个字符。如果打印出 whole 错误,它甚至可能告诉您类型是什么,但是作为提示,arithmetic_operator[i][0] 设为char

答案 1 :(得分:0)

要回答您的问题:您正在将char*传递到vector<char>。因此,将v定义为vector<char*>将解决该错误。

此外,正如已经指出的,gets在C ++ 11中是deprecated,在C ++ 14中将被删除。对于相同的功能,可以使用std::fgets。看看here