为什么一个 ostream <<重载能用,而另一个不能用?

问题描述 投票:0回答:1

我必须在一个项目中使用一些重载的<< 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;
}

有什么区别,为什么一个能用,另一个不能用?

c++ c++11 c++14 c++17
1个回答
2
投票

简单的错误

cout << movie1;

应是

cout << *movie1;

道理是,不要无谓地使用指针。

© www.soinside.com 2019 - 2024. All rights reserved.