gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 06:00:33 25 4
gpt4 key购买 nike

我正在尝试构建一个非循环树结构,每个节点都由一个字符串标识,每个分支节点都是 PrimMap 类型。同一代的所有节点都保存为 map 中的 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'参数传递丢弃限定符[-fpermissive ] pParent->add(contextName, Item(this, fix, marker ) );

我看不出这条错误消息是怎么回事——特别是,我看不出“this”是如何与构造函数中的“const PrimMap”* 相关联的。

我错过了什么?

最佳答案

Why -fpermissive is triggered in my code

您正在 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com