我正在尝试构建一个非循环树结构,每个节点由一个字符串标识,并且每个分支节点都是PrimMap类型。同一代中的所有节点都作为Item对象保存在地图中。这是缩写代码:
class PrimMap {
struct Item { // a tagged union of different typed objects
Item( PrimMap * pPrimMap );
...
}
PrimMap const * _pParent; // point to fixed parent
PrimMap( const std::string & contextName, PrimMap const * pParent );
enum Error { ... };
Error add( const std::string & key, Item item );
// add an Item to a branch node
}
inline PrimMap::PrimMap( const std::string & contextName, PrimMap const * pParent ) : _pParent( pParent )
{
if (pParent)
{
pParent->add( contextName, Item( this ) );
}
}
错误消息是: ../src/PrimMap.h:314:57:错误:将'const PrimMap'作为'this'参数传递'PrimMap :: Error PrimMap :: add(const string&,PrimMap :: Item)'丢弃限定符[ - fpermissive] pParent-> add(contextName,Item(this,fix,marker));
我没有看到这个错误消息是如何有意义的 - 特别是,我无法看到“this”如何与构造函数中的“const PrimMap”*相关联。
我错过了什么?
答案 0 :(得分:1)
为什么在我的代码中触发了
-fpermissive
您正在const
对象上调用非const
成员函数。
<强>修正强>
由于要修改父对象,请删除函数参数中的const
。
PrimMap( const std::string & contextName, PrimMap* pParent );
相应地更改实施。
inline PrimMap::PrimMap( const std::string & contextName, PrimMap* pParent )
{
if (pParent)
{
pParent->add( contextName, Item( this ) );
}
}