如何对复数使用默认构造函数
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);
这将创建一个具有自动存储持续时间的对象,您不需要手动清理它,而是在离开范围时将其销毁。
我有一个更复杂的复数应用程序,但遇到了麻烦。我看过 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);
这将创建一个具有自动存储持续时间的对象,您不需要手动清理它,而是在离开范围时将其销毁。