如何使用默认构造函数来表示复数

时间:2016-11-15 16:18:17

标签: c++ complex-numbers

我有一个更复杂的复杂数字应用,我遇到了麻烦。我查看了simple complex exusage 1usage 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信息,所以希望你从有用的例子中获得要点。这很复杂! ;)

补充:对不起我无法提供所有课程信息。这是巨大的,而不是我可以分享的东西。希望人们可以告诉我所说的与我所说的内容。我很感激不要投票给我,因为我正在尽我所能。

1 个答案:

答案 0 :(得分:1)

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);

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