类的未初始化对象作为参数
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();
【问题讨论】:
在Input
,Complex z
是按值传递的。 Input
函数在 main
中没有任何改变,因此 numar1
保持未初始化状态。而是通过引用传递。
我可以理解你提到的警告,但你到底在哪里得到错误?顺便说一句,C++ 中的函数默认将数据作为值传递。您应该将输入功能的定义更改为@OblivionreinstateOurMonica 在他/她的回答中建议的方式。
如果你愿意,我可以发布完整的代码作为答案
有什么理由不使用std::complex?
【参考方案1】:
如果你想改变你传递给函数的对象的状态并且对新的状态感兴趣,你需要通过引用函数来传递它:
void Input(Complex& z)
直播Godbolt。
【讨论】:
以上是关于类的未初始化对象作为参数的主要内容,如果未能解决你的问题,请参考以下文章