我有一个更复杂的复杂数字应用,我遇到了麻烦。我查看了simple complex ex,usage 1和usage 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信息,所以希望你从有用的例子中获得要点。这很复杂! ;)
补充:对不起我无法提供所有课程信息。这是巨大的,而不是我可以分享的东西。希望人们可以告诉我所说的与我所说的内容。我很感激不要投票给我,因为我正在尽我所能。
答案 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);
这将创建一个具有自动存储持续时间的对象,您不需要手动清理它,而是在保留范围时将其销毁。