我需要重写<<运算符,以便它可以cout小时(int)和温度(double)的值。
我想我已经包含了所有必要的部分。提前谢谢。
struct Reading {
int hour;
double temperature;
Reading(int h, double t): hour(h), temperature(t) { }
bool operator<(const Reading &r) const;
};
======
ostream& operator<<(ostream& ost, const Reading &r)
{
// unsure what to enter here
return ost;
}
======
vector<Reading> get_temps()
{
// stub version
cout << "Please enter name of input file name: ";
string name;
cin >> name;
ifstream ist(name.c_str());
if(!ist) error("can't open input file ", name);
vector<Reading> temps;
int hour;
double temperature;
while (ist >> hour >> temperature){
if (hour <0 || 23 <hour) error("hour out of range");
temps.push_back( Reading(hour,temperature));
}
}
答案 0 :(得分:4)
例如:
bool operator <(Reading const& left, Reading const& right)
{
return left.temperature < right.temperature;
}
它应该是一个全局函数(或者与Reading
在同一个命名空间中),而不是成员或Reading
,如果你要拥有它,它应该被声明为friend
任何受保护或私人成员。这可以这样做:
struct Reading {
int hour;
double temperature;
Reading(int h, double t): hour(h), temperature(t) { }
friend bool operator <(Reading const& left, Reading const& right);
};
答案 1 :(得分:3)
你可能想要像
这样的东西ost << r.hour << ' ' << r.temperature;
这是非常简单的东西,如果它没有意义,你应该真的和别人说话或买书。
如果它仍然没有意义或者你不能打扰,那么考虑选择另一个爱好/事业。
答案 2 :(得分:3)
// overload operator<
bool operator< ( const Reading & lhs, const Reading & rhs )
{
return lhs.temperature < rhs.temperature;
}
或者,您可以将运算符添加到结构...
struct Reading {
int hour;
double temperature;
Reading ( int h, double t ) : hour ( h ), temperature ( t ) { }
bool operator< ( const Reading & other ) { return temperature < other.temperature; }
}
答案 3 :(得分:2)
在运算符&lt;&lt;中使用类似std :: cout的ost参数。
答案 4 :(得分:2)
r.hour()
r.temperature()
您已将hour
和temperature
声明为Reading
的成员字段,而不是成员方法。因此,它们只是r.hour
和r.temperature
(无()
)。
答案 5 :(得分:1)
由于小时和温度是变量而不是函数,只需从()
函数中删除尾随的operator<<
。
答案 6 :(得分:1)
您可以在c ++中重载这样的运算符。
struct Reading {
int hour;
double temperature;
Reading(int h, double t): hour(h), temperature(t) { }
bool operator<(struct Reading &other) {
//do your comparisons between this and other and return a value
}
}