我有一个非常量字段ctxt。我有一个这样的功能:
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字段ctxt
...
函数get_coordinates_inventory不是const
有你的问题。请注意const
此方法的限定符:
inventory_entry *inventory_selector::find_entry_by_coordinate( point coordinate ) const
^^^^^
这意味着可以在上调用此方法const inventory_selector
。因此,在此函数中,隐式this
指针指向const inventory_selector
。因此,您不能在其上调用非const方法ctxt
-它也是const,因为它是对象的成员,该对象在方法的上下文中被视为const:
this
是const inventory_selector *
。this->ctxt
是const input_context &
。this->ctxt.get_coordinates_inventory()
不允许调用,因为该方法未声明为const。无论是inventory_selector::find_entry_by_coordinate
应非const,或input_context::get_coordinates_inventory
应进行常量。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句