【发布时间】:2021-09-12 17:55:41
【问题描述】:
在使用代码时,我发现了一个问题。 当声明友元函数并将 body 放在类之外时不会出错。
#include <iostream>
using namespace std;
class Clock
{
friend ostream& operator<<(ostream& os, const Clock& c)
{
return os << c.hour << " hr. " << c.minute << " min. ";
};
friend Clock HHMM(int hhmm);
public:
Clock() : hour(0), minute(0) { }
static Clock minutes(int m)
{
return Clock(m / 60, m % 60);
}
private:
int hour, minute;
Clock(int h, int m) : hour(h), minute(m) { }
};
Clock HHMM(int hhmm) {
return Clock(hhmm / 100, hhmm % 100);
}
int main()
{
Clock c1; // 0:00
Clock c2 = HHMM(123); // 1:23
Clock c3 = Clock::minutes(123); // 2:03
cout << c1 << endl;
cout << c2 << endl;
cout << c3 << endl;
return 0;
}
但是当将 body 放入类中时会出错。
#include <iostream>
using namespace std;
class Clock
{
friend ostream& operator<<(ostream& os, const Clock& c)
{
return os << c.hour << " hr. " << c.minute << " min. ";
};
friend Clock HHMM(int hhmm) {
return Clock(hhmm / 100, hhmm % 100);
};
public:
Clock() : hour(0), minute(0) { }
static Clock minutes(int m)
{
return Clock(m / 60, m % 60);
}
private:
int hour, minute;
Clock(int h, int m) : hour(h), minute(m) { }
};
int main()
{
Clock c1; // 0:00
Clock c2 = HHMM(123); // 1:23
Clock c3 = Clock::minutes(123); // 2:03
cout << c1 << endl;
cout << c2 << endl;
cout << c3 << endl;
return 0;
}
错误:标识符“HHMM”未定义。 我认为它们是相同的代码,但我不知道为什么一个有效而另一些无效。 请帮忙。
【问题讨论】:
-
在第二种情况下,HHMM 成为成员方法。在类内部,它需要被声明为静态的,并使用 Clock::HHMM 调用。但我认为你会从日常 C++ 用户那里得到更好的建议。