我正在尝试构建一个非循环树结构,其中每个节点都由字符串标识,并且每个节点的类型为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”作为“ PrimMap :: Error PrimMap :: add(const string&,PrimMap :: Item)”的“ this”参数传递]
   pParent-> add(contextName,Item(this,fix,marker));

我看不到此错误消息的含义-尤其是,我看不到构造函数中“ this”与“ const PrimMap” *的关联。

我错过了什么?

最佳答案

为什么在我的代码中触发-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 ) );
    }
}

关于c++ - 为什么在我的代码中触发-fpermissive,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33360346/

10-09 23:01