【问题标题】:Unitialized object of a class as parameters类的未初始化对象作为参数
【发布时间】:2019-11-10 09:32:57
【问题描述】:

我正在编写一个使用复数类的程序。我想使用函数void Input(Complex z) 来读取复数的实部和虚部并将它们分配给复数 z(这是参数),但是我得到了错误 Uninitialized local variable used和警告“使用未初始化的内存”。

我应该改变什么?

class Complex
{

    float x, y;
public:
    float modul() { return sqrt(x * x + y * y); };
    void setcomplex(float a, float b) { x = a; y = b; };
    void getcomplex() { cout << "(" << x << "," << y << ")"; };
    float getreal() { return x; };
    float getimaginar() { return y; };
};

Complex suma(Complex a, Complex b)
{
    Complex c;
    c.setcomplex( a.getreal() + b.getreal() , a.getimaginar() + b.getimaginar() );
    return c;

}

void Input(Complex z)
{
    float a, b;
    cout << endl << "Real part:"; cin >> a;
    cout << endl << "Imaginary part:"; cin >> b;
    z.setcomplex(a, b);
}

int main()
{
    Complex numar1;
    Input( numar1);
    numar1.getcomplex();
}

【问题讨论】:

  • InputComplex z是按值传递的。 Input 函数在 main 中没有任何改变,因此 numar1 保持未初始化状态。而是通过引用传递。
  • 我可以理解你提到的警告,但你到底在哪里得到错误?顺便说一句,C++ 中的函数默认将数据作为值传递。您应该将输入功能的定义更改为@OblivionreinstateOurMonica 在他/她的回答中建议的方式。
  • 如果你愿意,我可以发布完整的代码作为答案
  • 有什么理由不使用std::complex

标签: c++ class


【解决方案1】:

如果你想改变你传递给函数的对象的状态并且对新的状态感兴趣,你需要通过引用函数来传递它:

void Input(Complex& z)

直播Godbolt

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多