如何将对象添加到类中的静态向量中

问题描述 投票:0回答:1

我正在用c ++编写一个简单的程序,允许用户输入带有他的姓名,类别和等级的电影。我创建了两个类,第一个类是Movie。此类具有构造函数,用于使用我之前说过的属性(名称,类别,等级)实例化新的Movie对象。然后我有第二节课,叫做电影。在此类中,我想将每个Movie对象添加到静态向量,然后对其进行操作。

问题是,当我尝试将Movie对象添加到矢量时,似乎跳过了将其添加的部分。在其他方法findMovie()中,当我遍历此向量时,它将返回为空。

因此,如果现在不正确,如何正确创建静态矢量,以及如何将Movie对象添加到此矢量。

这里是代码:

电影Hpp:

    #ifndef MOVIE_HPP_
#define MOVIE_HPP_
#include <string>
#include <vector>
#include <iostream>
class Movie{
private:
    std::string name;
    std::string rating;
    std::string category;
    int id;
    static int MoviesCreated;
    friend class Movies;
public:
    //Constructor
    Movie(std::string, std::string, std::string, int, int);
    Movie(std::string, std::string, std::string, int);
    Movie();
    //Copy constructor
    Movie(const Movie &);

    //Destructor
    ~Movie(void);
    //Methods
    std::string getName(void) const;
    std::string getRating(void) const;
    std::string getCategory(void) const;
    int getLike(void) const;
    int getId(void) const;
    static int getMoviesCreated(void);
};

Movies.hpp:

    #ifndef MOVIES_HPP_
#define MOVIES_HPP_
#include <string>
#include <vector>
#include "Movie.hpp"

class Movies{
private:
    friend class Movie;
    static std::vector <Movie> moviesCollection;
public:
    void addMovie(Movie);
    void deleteMovie(std::string);
    Movie * findMovie(std::string);
    static std::vector <Movie> getCollection();
};


#endif

Movies.cpp:

     #include "Movies.hpp"

        std::vector <Movie> Movies::moviesCollection;

        std::vector <Movie> Movies::getCollection(void){
            return moviesCollection;
        }

        void Movies::addMovie(Movie m){
    Movies::getCollection().push_back(m);
}

方法addMovie,不添加电影。

这是我如何在函数内部的main中实现它。

    void enterMovie(void){
    string name, rating, category;
    int like,c;
    cout << "Enter the name: ";
    getline(cin, name);
    cout << "Enter the rating: ";
    getline(cin, rating);
    cout << "Enter the category: ";
    getline(cin, category);
    cout << "Enter a calification between 1-10 to rate this movie: ";
    cin >> like;
    if((c= getchar()) =='\n') c+=c;
    Movie Mov(name, rating, category, like);
    cout << "Movie entered: \n";
    display(Mov);
    collections.addMovie(Mov);
}

“集合”是我全局设置的Movies对象。

Movies collections;
int main(){

该问题要求同时使用两个类。

我最近正在学习c ++,因此对此代码的所有改进将非常有帮助

c++ oop vector static
1个回答
1
投票

getCollection返回当前集合的副本。由于要修改集合,因此应返回引用:

static std::vector<Movie> &getCollection();

请注意,在类型之后将&从值更改为引用。

© www.soinside.com 2019 - 2024. All rights reserved.