我必须在一个项目中使用一些重载的<< ostream操作符,我让第一个操作符在日期上正常工作,但是来自我的另一个类的操作符似乎给我带来了一些问题,我无法解决它。它没有给我任何错误,只是不能以正确的方式工作,并打印出来,这几乎看起来像一个内存地址。另外,当我运行调试器时,它似乎并不像日期版本那样 "介入 "stream overload函数。
这是在我的main中,它正确地初始化了我的Movie对象。
list<int> time1{1000, 1200, 1400, 1600};
list<int> time2{ 1100, 1300, 1500, 1700 };
Cinema cinema;
Movie * movie1 = new Movie("Superman", 1988, 11, 8);
cout << movie1;
cinema.addMovie(movie1, time1);
这就是我的Date班
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 &);
friend ostream & operator << (ostream &, Date &);
private:
int day, month, year;
};
这就是我的电影课
class Movie
{
public:
Movie(const 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 &);
const string getName();
private:
Movie() = default;
const Date releaseDate;
string name;
int rating = 0;
};
这些是我的Date ostream <<重载,工作正常。
ostream & operator << (ostream& os, Date & dt)
{
os << dt.month << "/" << dt.day << "/" << dt.year << "\n";
return os;
}
//////
ostream & operator << (ostream & os, const Date & dt)
{
os << dt.month << "/" << dt.day << "/" << dt.year << "\n";
return os;
}
而这些是我的电影,它不扔任何错误,他们只是打印出来,什么看起来是一个内存地址,但我不知道。
ostream & operator << (ostream & os, Movie & mo)
{
os << mo.getName() << " released: " << mo.releaseDate << " rated " << mo.rating << "\n";
return os;
}
///////////
ostream & operator << (ostream & os, const Movie & mo)
{
os << mo.name << " released: " << mo.releaseDate << " rated " << mo.rating << "\n";
return os;
}
有什么区别,为什么一个能用,另一个不能用?
简单的错误
cout << movie1;
应是
cout << *movie1;
道理是,不要无谓地使用指针。