首页 > 解决方案 > 为什么我的电影类在创建电影实例时遇到问题?

问题描述

我正在尝试创建一个Movie类的实例,以便可以将其添加到电影列表中,并与电影播放时间列表配对。但是,无论出于何种原因,它都在说尝试制作电影实例时出错。我认为构造函数可能存在错误,因为我的教授希望我们Date releaseDate保持不变,但我无法让一切正常工作。

这是错误消息

初始化器值太多
“const char”类型的值不能用于初始化电影类型的实体 *
初始化:无法从“初始化列表”转换为“电影 *”   

这是我试图用来创建实例Movie然后将其添加到电影列表中的代码cinema

Movie * movie ("Superman", 1988, 11, 08);
cinema.addMovie(movie, time1);

这是Movie课程:

class Movie 
{
    public:
        Movie(string & name, int yyyy, int mm, int dd) : name(name), releaseDate(Date(yyyy, mm, dd)) {}; 
        const Date & getReleaseDate(); 
        // other? 
        bool operator < (Movie& r);
        bool operator == (Movie &); 
        Movie & operator ++ (); 
        friend ostream & operator << (ostream &, Movie &); 
        friend ostream & operator << (ostream &, const Movie &); 

    private: 
        Movie() = default; 
        const Date releaseDate; 
        string name; 
        int rating;
};

这是Date类,它位于Movie类中并在构造函数中需要:

class Date 
{
    public: 
        Date(int = 0, int = 0, int = 0);
        //…. 
        // other as appropriate 
        bool operator < (Date&);
        bool operator == (Date &); 
        friend ostream & operator <<(ostream &, const Date &); 

    private:
        int day, month, year;
};

还有这个Cinema类,我最终希望通过添加类将其放入:

class Cinema
{
    public: 
        Cinema() = default; 
        Cinema(Cinema &); 
        void addMovie(Movie *, list<int> & );
        friend ostream & operator << (ostream &, Cinema &); 
        //Movie * operator[](int); 
        void movieRunningAt(Movie &, list<int> & ); 
        void printShowTimes(const Movie *);
        void printAll() const;

    private:
        std::list<Movie *> movies;
        map<const Movie*, list<int>> movie_times;
};

addMovie()功能Cinema

void Cinema::addMovie(Movie * m, list<int> & li)
{
    movie_times.insert(make_pair(m, li));
}

标签: c++c++11c++17

解决方案


Movie * movie ("Superman", 1988, 11, 08);

在上述行中,您声明的是指向电影的指针 ( Movie *),而不是Movie对象本身。指针不接受构造函数参数。

也许您打算这样做:

Movie * movie = new Movie("Superman", 1988, 11, 08);

推荐阅读