我正在尝试构建一个非循环树结构,其中每个节点都由字符串标识,并且每个节点的类型为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/