在 C++ 中重载运算符 < [重复]
Posted
技术标签:
【中文标题】在 C++ 中重载运算符 < [重复]【英文标题】:Overloading operator < in C++ [duplicate] 【发布时间】:2014-11-25 23:13:23 【问题描述】:似乎重载运算符对我不起作用,我可能做错了什么。
我有这个结构
typedef void (*fptr)(void);
struct Mystruct
int id;
int priority;
double timeSaved;
double aktivationTime;
fptr eventPointer;
MystructnextPtr;
Mystruct(int id, int priority, double timeSaved, double aktivationTime, fptr eventPointer);
;
这个运算符:
bool operator <(const Mystruct& x, const Mystruct& y)
return std::tie(x.aktivationTime, x.priority, x.timeSaved) < std::tie(y.aktivationTime, y.priority, y.timeSaved);
我正在尝试执行这段代码:
Mystruct* struct1 = new Mystruct(5, 10, 0, 15.3, f1);
Mystruct* struct2 = new Mystruct(5, 10, 0, 14.3, fi);
if (struct1 < struct2)
cout << "struct1 is smaller!" << endl;
else
cout << "struct2 is smaller!" << endl;
它总是对我说 struct1 更小,无论这些结构中有什么。做错了什么?
【问题讨论】:
您在比较指针而不是结构。试试 if (*struct1 更好的是,这里不要使用指针。 那么我应该如何创建结构? @TonyLee 它说,我没有创建后台操作员。 @Dracke:“那么我应该如何创建结构?”Mystruct struct1(5, 10, 0, 15.3, f1);
是常规方式。保存new
,以备您真正需要时使用。
【参考方案1】:
您创建了一个操作符来处理对Mystruct
的常量引用。 (const Mystruct&
)。但是,您在指向非常量 MyStruct
实例的非常量指针上使用了比较器运算符。
你有一个真正的选择:
- 尊重你的指点(*struct1 < *struct2)
不过也看看这里.. C++: Operator overloading of < for pointers to objects
【讨论】:
选项 1 不可行。至少一个操作数必须是用户定义的类型。 你是正确的修改答案..总是忘记这一点。以上是关于在 C++ 中重载运算符 < [重复]的主要内容,如果未能解决你的问题,请参考以下文章