在 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&amp;)。但是,您在指向非常量 MyStruct 实例的非常量指针上使用了比较器运算符。

你有一个真正的选择: - 尊重你的指点(*struct1 &lt; *struct2)

不过也看看这里.. C++: Operator overloading of < for pointers to objects

【讨论】:

选项 1 不可行。至少一个操作数必须是用户定义的类型。 你是正确的修改答案..总是忘记这一点。

以上是关于在 C++ 中重载运算符 < [重复]的主要内容,如果未能解决你的问题,请参考以下文章

在运算符重载(c ++)中对异常使用 throw [重复]

在C++中,啥是运算符重载?啥是虚函数?

C++:使用类|| 运算符重载友元

在 C++ 中调用成员的重载 << 运算符

C ++中重载赋值运算符的返回类型[重复]

实现重载运算符'<<'时出错 - C++