C++ 常量XX丢弃限定符[-fppermissive]
在下面的代码段1中,mKnownSRList的定义如下:C++ 常量XX丢弃限定符[-fppermissive],c++,c++11,C++,C++11,在下面的代码段1中,mKnownSRList的定义如下: std::vector<EndPointAddr*> mKnownSRList; 代码段2(编译错误) 代码片段3(GetTipAddress函数) EndPointTipcAddr & getTipcAddress() { return mTipcAddress; } 编码喷嘴4(与功能比较) 简而言之,之所以会出现此错误,是因为在本例中,您在一个const实例上调用了一个非const方法:srEndPointA
std::vector<EndPointAddr*> mKnownSRList;
代码段2(编译错误)
代码片段3(GetTipAddress函数)
EndPointTipcAddr & getTipcAddress() { return mTipcAddress; }
编码喷嘴4(与功能比较)
简而言之,之所以会出现此错误,是因为在本例中,您在一个const实例上调用了一个非const方法:
srEndPointAddr
是const,但您在它上调用了非const方法getticpaddress
。您的解决方案是声明此method const,因为它似乎是一个简单的getter,并且可能不会修改对象。谓词函数(如果std::remove\u的第三个参数)不允许修改对象。在迭代器上调用的所有方法都必须是const
。见:
函数不应修改其参数
如果返回值或const
指针的副本,则可以将getipcAddress
设置为const
。参见S5.1.2.5:
lambda表达式的闭包类型具有公共内联函数
呼叫操作员(13.5.4),其参数和返回类型如下所述
通过lambda表达式的参数声明子句和
分别为trailingreturn-type。此函数调用运算符为
声明常量(9.3.1)当且仅当lambdaexpression
参数声明子句后面没有可变的。两者都不是
虚拟或声明不稳定。默认参数(8.3.6)不应为
在lambdadecrator的参数声明子句中指定。
lambda表达式上指定的任何异常规范都适用
到相应的函数调用操作符。一
lambda声明符中的属性说明符seq与类型相关
对应函数调用运算符的。[注:参考名称]
在lambda声明器中,在
出现lambda表达式。-结束注释]
基本上,隐含的是生成的函子的运算符(),默认情况下,它是const
,并且您已按值捕获,并且此捕获的变量是生成的函子的一个成员
因此,您有两种选择:
通过引用而不是通过值捕获
将lambda更改为以下值(注意参数声明子句后面的mutable
):
[srEndPointAddr](EndPointAddr*o)可变{…}
我没有详细考虑过这一点,但我相信。但问题是,“为什么它是一个常数实例”?@juanchopanza-hmm我认为问题是如何修复这个错误。+1e6!最后有人解释了为什么会发生这样的事,而不是其他任何事情。
ServiceRegistrarAPI.cpp:355:72: error: passing ‘const EndPointAddr’ as ‘this’ argument of ‘EndPointTipcAddr& EndPointAddr::getTipcAddress()’ discards qualifiers [- fpermissive]
EndPointTipcAddr & getTipcAddress() { return mTipcAddress; }
bool
EndPointTipcAddr::compareTo(EndPointTipcAddr &rhs)
{
if( (mType == rhs.getType()) && (mInstanceNo == rhs.getInstanceNo()) )
{
return true;
}
return false;
}