为啥我的电影类在创建电影实例时遇到问题?
Posted
技术标签:
【中文标题】为啥我的电影类在创建电影实例时遇到问题?【英文标题】:Why is my class Movie having an issue creating an instance of a Movie?为什么我的电影类在创建电影实例时遇到问题? 【发布时间】:2020-05-11 23:47:02 【问题描述】:我正在尝试创建 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));
【问题讨论】:
为什么Cinema
有一个list
和一个包含Movie*
指针的map
?你不需要list
当然,按照教授的要求去做,但请注意,const 非静态数据成员通常是个坏主意;他们无条件地禁用分配(可以在需要时通过使整个对象变为常量来禁用)。
【参考方案1】:
Movie * movie ("Superman", 1988, 11, 08);
在上述行中,您声明的是指向电影的指针 (Movie *
),而不是 Movie
对象本身。指针不接受构造函数参数。
也许您打算这样做:
Movie * movie = new Movie("Superman", 1988, 11, 08);
【讨论】:
确实有帮助,谢谢,但现在是说,"Severity Code Description Project File Line Suppression State Error C2664 'Movie::Movie(Movie &&)': cannot convert argument 1 from 'const char [9]' to 'std::string &' why does it say it is a char array when there are double quotes around superman? "
一个 字符串文字 是一个 const char[N]
数组,其中 N
是字符串的长度 +1 用于空终止符(所以 "Superman"
= 8 个字符 + 1 个终止符 = 9)。 Movie
构造函数通过 non-const 引用获取 string
参数,因此它要求调用者提供实际的 string
对象,编译器不能隐式 将 const char[]
转换为 temp string
对象以满足该引用。更改参数以通过 按值 (Movie(string name, ...)
) 或通过 const 引用 (Movie(const string & name, ...)
) 传递 string
,然后是 隐式 转换将起作用。【参考方案2】:
对象的初始化存在问题。您已经使用了指针,但尚未对其进行初始化。您可以声明对象,对其进行初始化,然后使用指针。希望对您有所帮助。
【讨论】:
以上是关于为啥我的电影类在创建电影实例时遇到问题?的主要内容,如果未能解决你的问题,请参考以下文章
为啥我可以在 MPMoviePlayer 中播放一部电影而不能播放另一部电影?
为啥我的电影不能使用 MPMoviePlayerController 播放?