我在C ++中的类上具有一个函数,该函数应该修改该类中对象的成员变量。该函数必须具有以下签名:
void normalize()
{
int& a = numerator;
int& b = denominator;
int modifier = Euclid(a, b); //euclidean algorithm
if (modifier < 0) { modifier = modifier * -1; }
a = a / modifier;
b = b / modifier;
}
Rational temp(16, 84);
Rational temp2 = temp.normalize();
当这样调用时,我被告知没有可以从void转换为Rational的构造函数。
该函数本身在实现时不是“无效”的。
我需要在其他对象上调用此函数,当它不能接受输入或产生输出时该怎么办?即object.normalize()产生错误。
编辑:找到了一个解决方案,我只需要将其实现为object.normalize()
,而无需尝试进行任何分配。
答案 0 :(得分:1)
如果函数的返回类型为void
,则函数不返回任何内容。因此,拥有
Rational temp2 = temp.normalize();
使用void
函数,只需将它们置于自己的命令中即可,而无需分配。
// ...
temp.normalize();
// ...
尽管您打算使返回该函数,但请考虑将函数的返回类型更改为合适的
Rational normalize()
{
int modifier = Euclid(numerator, denominator);
// ...
numerator /= modifier
// ...
return ...;
}
还请注意,如果您可以直接修改numerator
和denominator
,则不需要创建引用a
和b
。 / p>
答案 1 :(得分:-1)
struct foo {
int bar;
void normalize()
{
bar = 42; // modifies member ("by reference" makes no sense)
}
};
// ...
foo object;
object.normalize(); // changes object