在 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
}
所以我正在做一个简单的(或者我认为的)练习来帮助培养我的 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
}