整数push_back不适用于我的字符串向量

push_back of an integer doesn't work on my vector of strings

提问人:Dami Karv 提问时间:3/31/2022 最后编辑:Remy LebeauDami Karv 更新时间:4/1/2022 访问量:1307

问:

我正在尝试并行推回 3 个向量,当我进入字符串向量时,我收到以下错误:push_back()

no instance of overloaded function "std::vector<_Ty, _Alloc>::push_back [with _Ty=std::string, _Alloc=std::allocator<std::string>]" matches the argument listC/C++(304)
ask3.cpp(38, 8): argument types are: (int)
ask3.cpp(38, 8): object type is: std::vector<std::string, std::allocator<std::string>>

这是我所处的代码块:

#include <iostream>
#include <fstream>
#include <sstream>
#include <vector>
#include <string>
using namespace std;

int main()
{
    int length, count = 0, moviecount = 0, spacecount = 0;
    ;
    vector<int> status, price;
    vector<string> movies;
    string FileName, text, line, dummy;

    FileName = "MovieList.txt";

    ifstream InFile;
    InFile.open(FileName);
    while (!InFile.eof()) {
        getline(InFile, line);
        text += line + "\n";
    }
    cout << text;

    length = text.length();
    for (int i = 0; i <= length; i++) {
        if (text[i] == ' ') {
            spacecount++;
        }
    }
    if (spacecount == 2) {
        moviecount = 1;
    }
    else if (spacecount > 2) {
        int temp = spacecount;
        temp = temp - 2;
        temp = temp / 3;
        moviecount = 1 + temp;
    }
    movies.push_back(moviecount); //<-- problem line
    status.push_back(moviecount);
    price.push_back(moviecount);
}
C++ 字符串 向量 std 推回

评论

3赞 MikeCAT 3/31/2022
旁注:您的用法是错误的。在使用“读取”之前,您应该检查读取是否成功。while(!InFile.eof())
3赞 Nathan Pierson 3/31/2022
moviecount是 . 是一个 .没有从 an 到 的隐式转换。目前尚不清楚您希望在这里发生什么,但这就是它拒绝编译的原因。intmoviesvector<string>intstd::string
0赞 Vlad from Moscow 3/31/2022
@Dami Karv 错误消息不清楚什么?!
0赞 Caleth 3/31/2022
题外话:为什么你需要 3 个向量,每个向量都包含相同的 1?你想用这个程序做什么?int

答:

2赞 MikeCAT 3/31/2022 #1

movies是 的向量,所以不能直接推送。stringint

如果您使用的是 C++11 或更高版本,则可以使用 std::to_string 将整数转换为字符串。

将整数转换为字符串的另一种方法是使用 std::stringstream,如下所示:

std::stringstream ss;
ss << moviecount;
movies.push_back(ss.str());

评论

0赞 Dami Karv 3/31/2022
谢谢,它奏效了。我希望这个问题有用,因为直接谷歌搜索它不会得到很多结果。
0赞 Remy Lebeau 4/1/2022
"将整数转换为字符串的另一种方法是......”- 在这种情况下会更合适。std::ostringstream
0赞 user3897197 3/31/2022 #2

这是因为您正在尝试将值推送到初始化以存储值的向量中。intmoviesstring

不确定您要从此代码中得到什么,但是 您可以像这样将向量的类型更改为 int : 或者使用 std::to_string() 在 push_back() 之前将 int 转换为字符串,如下所示:vector<int> moviesmovies.push_back(std::to_string(moviecount))