首页 > 解决方案 > 如何将对象添加到类中的静态向量

问题描述

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

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

那么,如果现在不正确,如何正确创建静态向量,以及如何将电影对象添加到该向量。

这是代码:

电影 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);
};

电影.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

电影.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++oopvectorstatic

解决方案


getCollection返回当前集合的副本。由于您要修改集合,您应该返回一个引用:

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

请注意在&类型之后添加以将其从值更改为引用。


推荐阅读