我正在为类这样的类重载一个小于运算符:
#include<string>
using namespace std;
class X{
public:
X(long a, string b, int c);
friend bool operator< (X& a, X& b);
private:
long a;
string b;
int c;
};
然后执行文件:
#include "X.h"
bool operator < (X const& lhs, X const& rhs)
{
return lhs.a< rhs.a;
}
但是,它不允许我访问实现文件中的a
数据成员,因为a
被声明为私有数据成员,即使它通过X
对象?
答案 0 :(得分:11)
友元函数与函数定义函数的签名不同:
friend bool operator< (X& a, X& b);
和
bool operator < (X const& lhs, X const& rhs)
// ^^^^^ ^^^^^
您只需将标题文件中的行更改为:
即可friend bool operator< ( X const& a, X const& b);
// ^^^^^ ^^^^^
由于您没有修改比较运算符中的对象,因此它们应该采用const引用。
答案 1 :(得分:7)
您已向您尝试使用的人声明了不同的朋友功能。你需要
friend bool operator< (const X& a, const X& b);
// ^^^^^ ^^^^^
在任何情况下,比较运算符都采用非常量引用是没有意义的。