为什么-fpermissive在我的代码中被触发

时间:2015-10-27 05:11:50

标签: c++ gcc g++

我正在尝试构建一个非循环树结构,每个节点由一个字符串标识,并且每个分支节点都是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”*相关联。

我错过了什么?

1 个答案:

答案 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 ) );
    }
}