我有一个非康斯特场。我有这样的职责:
inventory_input inventory_selector::get_input()
{
inventory_input res;
const input_context ip;
res.action = ctxt.handle_input();
res.ch = ctxt.get_raw_input().get_first_input();
std::tuple<point, bool> tuple = ctxt.get_coordinates_inventory( w_inv );//Fine
std::tuple<point, bool> tuple = ip.get_coordinates_inventory( w_inv );//Error
res.entry = find_entry_by_invlet( res.ch );
if( res.entry != nullptr && !res.entry->is_selectable() ) {
res.entry = nullptr;
}
return res;
}错误是“对象具有与成员函数不兼容的类型限定符”,因为ip是const,但函数get_coordinates_inventory不是const。然而,我还有一个这样的功能:
inventory_entry *inventory_selector::find_entry_by_coordinate( point coordinate ) const
{
input_context ip;
std::tuple<point, bool> tuple = ctxt.get_coordinates_inventory( w_inv );//surprising, this line is having error.
std::tuple<point, bool> tuple = ip.get_coordinates_inventory( w_inv );//this line dosn't has error
}错误消息是:对象具有与成员函数"input_context_inventory“对象类型不兼容的类型限定符是: const input_context。我不明白为什么会发生这种情况,ctxt和ip都是非const的,它们中的一个怎么会有错误而另一个却没有呢?
发布于 2020-05-23 09:02:33
I有一个非const字段ctxt
..。
函数get_coordinates_inventory不是const
这是你的问题。请注意此方法上的const限定符:
inventory_entry *inventory_selector::find_entry_by_coordinate( point coordinate ) const
^^^^^这意味着可以在const inventory_selector上调用此方法。因此,在此函数中,隐式this指针指向const inventory_selector。因此,您不能在ctxt上调用非const方法--它也是const,因为它是在方法上下文中被认为是const的对象的成员:
this is const inventory_selector *.this->ctxt is const input_context &.this->ctxt.get_coordinates_inventory()不允许,因为该方法未声明为const.。
inventory_selector::find_entry_by_coordinate应该是非const的,input_context::get_coordinates_inventory应该是const的.
https://stackoverflow.com/questions/61969331
复制相似问题