我正在用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 ++,因此对此代码的所有改进将非常有帮助
getCollection
返回当前集合的副本。由于要修改集合,因此应返回引用:
static std::vector<Movie> &getCollection();
请注意,在类型之后将&
从值更改为引用。