我这样定义了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(); }
^
答案 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语句,然后认为没有返回语句。