在C ++类上调用void函数

时间:2018-11-03 02:17:05

标签: c++

我在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(),而无需尝试进行任何分配。

2 个答案:

答案 0 :(得分:1)

如果函数的返回类型为void,则函数不返回任何内容。因此,拥有

毫无意义
Rational temp2 = temp.normalize();

使用void函数,只需将它们置于自己的命令中即可,而无需分配。

// ...

temp.normalize();

// ...

尽管您打算使返回该函数,但请考虑将函数的返回类型更改为合适的

Rational normalize()
{ 
    int modifier = Euclid(numerator, denominator);
    // ...
    numerator /= modifier
    // ...

    return ...;
}

还请注意,如果您可以直接修改numeratordenominator,则不需要创建引用ab。 / p>

答案 1 :(得分:-1)

struct foo {

    int bar;

    void normalize()
    {
        bar = 42; // modifies member ("by reference" makes no sense)
    }
};

// ...

foo object;
object.normalize(); // changes object