如何使用默认构造函数的复数

How use default constructor for complex numbers

本文关键字:构造函数 何使用 默认      更新时间:2023-10-16

我有一个更复杂的复数应用程序,我遇到了麻烦。我已经学习了简单复数ex,以及用法1和用法2。我在将其应用于我的具体示例时遇到了麻烦,该示例必须是c++ 98版本。

我很幸运地在模板类中做到了这一点,但后一个是不同的:
 TYPE data_var(fvalue, fvalue);

但是遇到更复杂的问题:

case  <ourcomplex float>:
OurClassComplex* data_var( dat, dat);  //this does not compile

有错误消息:

error: initializer expression list treated as compound expression,
warning: left-hand operand of comma has no effect ,
error: invalid conversion from 'unsigned char' to 'std::complex<float>*'

过去是这样定义的,但是我们不能再使用这个版本了(必须使用98版本):

((OurClassComplex*)(data_var))->real( dat);
((OurClassComplex*)(data_var))->imag( dat);

对于如何在c++ 98中实现这个功能有什么想法吗?我不能分享OurClassComplex的信息,所以希望你能从这个例子中得到要点。这是复杂的!;)

补充:对不起,我不能给所有的类信息。它太大了,我不能分享。希望人们能从我给出的内容中看出我在说什么。我希望你不要否决我,因为我在分享我能做的。

In

OurClassComplex* data_var( dat, dat); 

您正在初始化指向OurClassComplex的指针。指针只有一个初始化项,即它所指向的对象的地址。所以当编译器看到

OurClassComplex* data_var( dat, dat); 

将初始化式中的逗号视为逗号操作符,而不是构造函数调用。这意味着它将放弃第一个dat,并尝试使用第二个dat来初始化data_var

如果你需要一个指针,那么你需要使用

OurClassComplex* data_var = new OurClassComplex( dat, dat);

将动态创建一个新实例。您必须记住在完成后删除它,否则您将有内存泄漏。

如果你不需要指针,那么你只需要

OurClassComplex data_var( dat, dat);

这将创建一个具有自动存储持续时间的对象,您不需要手动清除它,但是当作用域离开时,它将被销毁。