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

How use default constructor for complex numbers

我有一个更复杂的复数应用程序,但遇到了麻烦。我看过 simple complex ex, and usage 1, and usage 2。我无法将其应用于我的特定示例,该示例必须是 C++ 98 版本。

我很幸运用模板做到了这一点 class,但后面的模板不同:

 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 信息,所以希望您能从有效的示例中得到要点。这很复杂! ;)

补充:抱歉,我无法提供所有 class 信息。这是巨大的,不是我可以分享的。希望人们能通过我给出的内容来判断我在说什么。我很感激不要对我投反对票,因为我正在分享我能分享的东西。

OurClassComplex* data_var( dat, dat); 

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

OurClassComplex* data_var( dat, dat); 

它将初始化程序中的逗号视为逗号运算符,而不是构造函数调用。这意味着它将丢弃第一个 dat 并尝试使用第二个 dat 来初始化 data_var with.

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

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

这将动态创建一个新实例。你必须记得在完成后删除它,否则你会发生内存泄漏。

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

OurClassComplex data_var( dat, dat);

这将创建一个具有自动存储持续时间的对象,您不需要手动清理它,而是在离开范围时将其销毁。