使用谓词作为比较函数时出错

时间:2014-05-14 14:44:19

标签: c++

我这样定义了map

std::map<Order*, OrderItems, SortOrders>

这里是SortOrders

class SortOrders {
        public: 
            bool operator() (const Order& x, const Order& y) const { return x.id() < y.id(); }
    };

为什么我收到此错误?

error: invalid use of incomplete type ‘const class Order’
    bool operator() (const Order& x, const Order& y) const { return x.id() < y.id(); }
                                                                          ^

2 个答案:

答案 0 :(得分:1)

您的地图由Order*键入,但您的谓词需要Order(或实际为const Order&)。这些是不兼容的类型。

更改谓词以接受Order*(或const Order*),或将地图更改为按值而不是指针存储Order个对象。

查看错误本身的文本 - SortOrders实际上是否看到Order的完整定义?这很可能意味着,您是#include定义Order的头文件吗?

答案 1 :(得分:0)

映射使用指针作为键,但比较器会比较对象。

将密钥类型更改为Order,或将比较器更改为

bool operator() (const Order* x, const Order* y) const { return x->id() < y->id(); }

&#34;不完整类型&#34;错误是因为class Order的定义不可用。确保您包含定义它的标题。

&#34;控件到达功能结束&#34;警告可能是由此引起的 - 编译器放弃解释return语句,然后认为没有返回语句。