类的未初始化对象作为参数

Posted

技术标签:

【中文标题】类的未初始化对象作为参数【英文标题】: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? 【参考方案1】:

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

void Input(Complex& z)

直播Godbolt。

【讨论】:

以上是关于类的未初始化对象作为参数的主要内容,如果未能解决你的问题,请参考以下文章

为啥在函数体内定义的内置类型的未初始化对象具有未定义的值?

拷贝构造函数详解

拷贝构造函数详解

9.14 学习总结

Flutter 6种构造函数详解

使用 Joblib 将类对象实例作为输入参数的并行化函数