在 C++ 中使用结构重载运算符

Overloading operators with structures in c++

所以我正在做一个简单的(或者我认为的)练习来帮助培养我的 C++ 技能。

我有这个简单的结构来跟踪日期信息。我需要重载一个运算符来显示结果。这是一个简单的函数,我以前在 类 中使用过,从来没有遇到过任何问题。但是,在本练习中,我收到以下错误:

显式调用括号前的表达式必须具有(指向)函数类型

这是我的代码。问题函数是ostream& operator << (ostream& os, const Date date)函数,在代码中有注释

    #include<iostream>
    #include<ostream>
    #include "error.h"

    using namespace std;

    inline void keep_window_open(string s)
    {
        if (s == "") return;
        cin.clear();
        cin.ignore(120, '\n');
        for (;;) {
            cout << "Please enter " << s << " to exit\n";
            string ss;
            while (cin >> ss && ss != s)
                cout << "Please enter " << s << " to exit\n";
            return;
        }
    }
        struct Date {   
            int year;
            int month;
            int day;
        };
        Date today;
        Date tomorrow;

        // Helper functions
        void initializeDay(Date& date, int year, int month, int day)
        {
            if (month < 1 || month > 12)
            {
                error("Invalid month");
            }
            if (day < 1 || day > 31)
            {
                error("Invalid day");
            }
            date.year = year;
            date.month = month;
            date.day = day;
        }

        void addDay(Date& date, int daysToAdd)
        {
            date.day += daysToAdd;
        }       

        // Does not work    
        ostream& operator << (ostream& os, const Date date)
        {
            return os << '(' << date.year()
                << ',' << date.month()
                << ',' << date.day()
                << ')';
        }

    int main()
    {           
        initializeDay(today, 2020, 9, 21);  
        tomorrow = today;
        addDay(tomorrow, 1);

        keep_window_open("~");

        return 0;
    }

就像我说的,我以前用过问题函数没有问题。我唯一能想到的是它与结构有关,但这对我来说没有意义。所以我想这可能是别的东西。

如有任何帮助,我们将不胜感激。感谢您的宝贵时间和帮助。

您的结构没有实现任何方法。 不要调用 date.year() 只需调用 date.year

这是原因: 你在做 date.year() 但是 year 是结构的成员而不是函数......所以你必须做 date.year 而不是

ostream& operator << (ostream& os, const Date date)
{
    return os << '(' << date.year
        ....etc
}