错误:传递';xxx和x27;as';这';参数';xxx和x27;丢弃限定符[-fppermissive] 我正在编写一个介绍C++类的程序,我得到了一个我不理解的错误信息。我有一个叫做分数的类,有一个叫做DividedBy的成员函数。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;}

错误:传递';xxx和x27;as';这';参数';xxx和x27;丢弃限定符[-fppermissive] 我正在编写一个介绍C++类的程序,我得到了一个我不理解的错误信息。我有一个叫做分数的类,有一个叫做DividedBy的成员函数。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;},c++,C++,我调用的函数如下所示: result = f3.DividedBy(f4); 结果、f3和f4都是分数对象。我收到以下错误消息: 将“const fraction”作为“fraction fraction::DividedBy(fraction)”的“this”参数传递将丢弃限定符[-fppermissive] 这是什么意思?我查阅了这条信息,似乎总是有人试图传递一个持续的论点,我很确定我没有这样做。我正在以某种方式丢弃哪些限定符?f3是常量引用,如果是,DevideBy必须声明为常量 f3是

我调用的函数如下所示:

result = f3.DividedBy(f4);
结果、f3和f4都是分数对象。我收到以下错误消息:

将“const fraction”作为“fraction fraction::DividedBy(fraction)”的“this”参数传递将丢弃限定符[-fppermissive]


这是什么意思?我查阅了这条信息,似乎总是有人试图传递一个持续的论点,我很确定我没有这样做。我正在以某种方式丢弃哪些限定符?

f3是常量引用,如果是,DevideBy必须声明为常量

f3是否为常量引用,如果是,则必须将DevideBy声明为常量

这意味着您已将f3声明为类型
常量分数
,这意味着您无法更改它。即使被分割的方法
没有改变它,也不能保证它,所以编译器假定该方法可以以某种方式改变它

这里的解决方案是要么不使用f3常量,要么通过将声明和定义更改为

fraction fraction::DividedBy(fraction operand) const   

fraction fraction::DividedBy(fraction operand) const {
...
}
根据经验法则,最好使任何可以恒定的东西都保持恒定。例如,您可以将操作数设置为
常量分数&
类型,这样可以防止不必要的类复制,同时在传递常量分数时仍然不会阻止代码编译


最后一部分
[-fppermissive]
只是编译器告诉您如何抑制此警告并使其以任何方式编译(您只需将此标志传递给编译器)。很高兴知道有这个选项,但除非你真的确定你在做什么,以及为什么不能用正确的方法来做,否则你不应该使用它。

这意味着你已经将f3声明为type
const fraction
,这意味着你不能更改它。即使被
分割的方法
没有改变它,也不能保证它,所以编译器假定该方法可以以某种方式改变它

这里的解决方案是要么不使用f3常量,要么通过将声明和定义更改为

fraction fraction::DividedBy(fraction operand) const   

fraction fraction::DividedBy(fraction operand) const {
...
}
根据经验法则,最好使任何可以恒定的东西都保持恒定。例如,您可以将操作数设置为
常量分数&
类型,这样可以防止不必要的类复制,同时在传递常量分数时仍然不会阻止代码编译


最后一部分
[-fppermissive]
只是编译器告诉您如何抑制此警告并使其以任何方式编译(您只需将此标志传递给编译器)。很高兴知道有这个选项,但除非你真的确定你在做什么,以及为什么不能用正确的方法来做,否则你不应该使用它。

那么
f3
是如何声明的呢?请做一个大胆的尝试,我要说
DividedBy
应该是
const
,这样你就可以调用
const了分数。我知道我的错误在哪里了。有人给了我代码,让我为它编写一个类。代码声明f3为常量,我没有意识到。我还将努力确保将来对代码有一个更完整的描述。那么,
f3
是如何声明的呢?请做一个声明,我要大胆尝试一下,说
DividedBy
应该是
const
,这样你就可以在
const fraction
s上调用它。我知道我的错误在哪里了。有人给了我代码,让我为它编写一个类。代码声明f3为常量,我没有意识到。我还将尽力确保在将来给出更完整的代码图。