错误:将'xxx'作为'xxx'丢弃限定符的参数传递'this' [-允许]
error: passing 'xxx' as 'this' argument of 'xxx' discards qualifiers [-fpermissive]
我正在编写一个介绍性C 类的程序,并且我收到的错误消息我不了解。我有一个称为分数的类,带有一个名为Divideby的成员函数。Dividedby的初始化和定义如下:
fraction fraction::DividedBy(fraction operand)
fraction fraction::DividedBy(fraction operand){
int quotNum = num * operand.num;
int quotDenom = denom * operand.denom;
simplify(quotNum, quotDenom);
fraction quot = fraction(quotNum, quotDenom);
return quot;}
我称之为划分的函数:
result = f3.DividedBy(f4);
结果,F3和F4都是分数对象。我收到此错误消息:
将" const ration"作为"分数分数::分裂(分数)"的" const ration"丢弃了预选赛[-fpermissive]
这是什么意思?我查看了此消息,似乎总是涉及一个试图通过不断的论点的人,我敢肯定我在这里不做。我以某种方式丢弃的预选赛是什么?
这意味着您已将F3声明为const fraction
类型,这意味着您无法更改它。即使方法DividedBy
没有更改它,也无法保证它,因此编译器假设该方法可以以某种方式更改它。
这里的解决方案要么通过将声明和定义更改为
来使F3恒定或更好地使方法DividedBy
恒定 fraction fraction::DividedBy(fraction operand) const
fraction fraction::DividedBy(fraction operand) const {
...
}
根据经验法则,最好使任何可能恒定的东西保持不变。例如,您可以制作const fraction &
类型的操作数,该操作数将阻止您的类不必要地复制您的类,同时仍不阻止代码通过时持续分数。
最后一部分[-fpermissive]
只是编译器,告诉您如何抑制此警告并使其对此进行编译(您只需将此标志传递给编译器)。很高兴知道有此选项,但是除非您真的确定自己在做什么以及为什么不能以适当的方式完成它,否则您永远不要使用它。
是f3 a const引用,如果必须将其声明为const。
相关文章:
- 表示"accepting anything for this template argument" C++概念的通配符
- 为什么使用 "this" 指针调用派生成员函数?
- C++错误:"error: int aaa::bbb is protected within this context"
- 我可以将调用类的"this"传递给 lambda 函数吗?
- 创建具有 new in 函数和"this is nullptr"异常的对象
- 关于C++中具有多重继承"this"指针的说明
- 在noexcept 规范中是否允许使用"this"?
- 如何修复"error: ‘_1’ was not declared in this scope"?
- C++调用具有 *this 属性的单个帮助程序函数
- Doees the 'this' 指针参与虚函数的多态行为
- 在 c++ 中正确定义"this"关键字?
- 在什么情况下,两个堆栈分配的结构对象的 this 点指向同一个地址?
- "Unable to start debugging. No process is associated with this object." - 在Visual Studio Code中使用GDB
- QObject::连接无法将信号连接到*this*对象的插槽
- 析构函数中的"delete this"
- 为什么成员函数内的"this"指针为空?
- "passing const XXX as this disregards qualifiers"解释 ?
- 错误:将'xxx'作为'xxx'丢弃限定符的参数传递'this' [-允许]
- 错误:将"xxx"作为"this"参数传递会丢弃限定符
- C++错误:将 xxx 作为 xxx 的参数传递'this'丢弃限定符