【问题标题】:Overloading operator < in C++ [duplicate]在 C++ 中重载运算符 < [重复]
【发布时间】: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,以备您真正需要时使用。

标签: c++ operator-overloading


【解决方案1】:

您创建了一个操作符来处理对Mystruct 的常量引用。 (const Mystruct&amp;)。但是,您在指向非常量 MyStruct 实例的非常量指针上使用了比较器运算符。

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

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

【讨论】:

  • 选项 1 不可行。至少一个操作数必须是用户定义的类型。
  • 你是正确的修改答案..总是忘记这一点。
猜你喜欢
  • 1970-01-01
  • 2011-10-27
  • 2012-12-22
  • 2016-09-26
  • 2012-04-21
  • 1970-01-01
  • 1970-01-01
  • 2020-04-29
  • 1970-01-01
相关资源
最近更新 更多