首页 > 解决方案 > 如何在 C++ 中读取文件并将数据从文件插入到向量中,这是一个类的类型?

问题描述

就像标题说的那样,我需要将文件中的数据插入到向量中,这是我创建的一种类。这是我的代码:

#include <iostream>
#include <fstream>
#include "Film.h"
#include "Comedy.h"
#include <string>
#include <vector>
using namespace std;
Comedy k;
Film f;

int main() {
    vector <Comedy> comedy;
   

    ifstream Comedies("Comedy.txt", ios::in);
    int number = 0;
    string line;
    while (getline(Comedies, line)) {
        br++;
        komedija.push_back(line); // this is where I get the error
    }
   

这是喜剧课:

#pragma once
#include "Film.h"
#include "Actor.h"
#include <vector>
#include <string>
#include <fstream>
using namespace std;

enum Type2 {black = 1, romantic, child};

class Comedy :
    public Film
{
private:
    vector<Actor>actors;
    Type2 typeComedy;
public:
    void setActors();
    vector<Actors>& getActors();
    void setType();
    Type2 getType();
    void insert();
};
 

任何人都知道问题是什么,我认为这是因为line变量是一种字符串类型,并且我试图插入不是字符串类型的向量,然后我如何将文件中的数据插入到不是字符串的向量中细绳?

这是一个电影类:

#pragma once
class Film
{
private:
    char name[25];
    int timeOfDuration;
    char startMovieTime[7];
public:
    Film();
    void setName();
    char* getName();
    void setTimeOfDuration();
    int getTimeOfDuratiion();
    void setStartMovieTime();
    char* getStartMovieTime();
    ~Film() {};
};

标签: c++

解决方案


假设Film有一个接受 a 的构造函数std::string,我建议将它添加到派生类中:

示例Comedy

class Comedy : public Film {
public:
    using Film::Film; // add the `Film` constructor(s)
    // ...
};

然后添加一个新的Comedy可以使用std::vector::emplace_back

komedija.emplace_back(line);

演示

如果您出于某种原因想要将电影名称存储在 a 中char[],您仍然可以使用接受 astd::string并将其存储在您的char[].

例子:

#include <algorithm> // std::copy_n, std::min

class Film {
private:
    char name[25];

public:
    Film() : name{} {} // initialize name

    // added constructor:
    Film(const std::string& Name) : Film() {
        std::copy_n(Name.c_str(), std::min(sizeof name - 1, Name.size()), name);
    }
};

注意:除非Comedy有一些特殊的成员变量/函数,否则我建议添加一个category成员Film而不是继承自Film.


推荐阅读