2014-05-14 20 views
0

我定义我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(); } 
                     ^
+1

在执行SortOrders之前,您需要定义Order。然后你需要实现一个函数来实际比较'Order'的指针。 – juanchopanza

回答

0

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

无论是键类型更改为Order,或比较,以

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

的“不完全类型”错误是因为class Order定义不可用。确保你包含定义它的头文件。

“控制达到功能的结束”警告可能是由于 - 编译器放弃解释return语句,然后认为没有返回语句。

+0

现在很多错误都消失了,但是我之前描述的仍然是“非法使用不完整类型”。我也得到这个警告警告:'控制到达非空函数结束[-Wreturn-type] bool operator()(const Order * x,const Order * y)const {return x-> id()< y-> id ); }' – dabadaba

+0

@dabadaba:对不起,我没有注意到这个错误。这意味着在使用之前你还没有定义'Order';确保你包含定义它的头文件。 –

+0

查看@juanchopanza对您的原始问题帖子的评论。应该解释一下。 – poljpocket

1

你的地图是由Order*键,但你的断言期待并Order(或实际const Order&)。这些是不兼容的类型。

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

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