如何使用默认构造函数的复数
How use default constructor for complex numbers
我有一个更复杂的复数应用程序,我遇到了麻烦。我已经学习了简单复数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);
这将创建一个具有自动存储持续时间的对象,您不需要手动清除它,但是当作用域离开时,它将被销毁。
相关文章:
- 在c++构造函数中使用随机字符串生成器
- C++-我可以创建另一个类的成员并在构造函数中使用它吗
- 在作为静态成员包含在另一个类中的类的构造函数中使用 cout
- C ++:在构造函数中使用参数包?
- 在构造函数中使用 lambda 的 C++ 类
- (SFML)按下键时,播放器构造函数未使用正确的动画进行更新
- 在类构造函数中使用结构变量
- 如何在构造函数中使用初始值设定项设置具有相同值的 2d 数组?
- 在构造函数中使用可变参数初始化 std::tuple
- 为什么在删除"移动构造函数"时使用"复制构造函数"?
- 在没有默认构造函数时使用垃圾数据初始化对象
- 类模板和构造函数的使用
- 在构造函数中使用重载运算符?
- C++/Win32 构造函数不使用从对话框获取的字符串初始化变量
- 在类和构造函数中使用向量时出现分段错误
- 在构造函数中使用 constexpr 成员
- 为什么我们需要创建一个单参数构造函数来使用临时的无名称对象
- 在结构的构造函数中使用类方法赋值变量
- 如何根据构造函数参数使用超类类型初始化成员变量?
- 如何在带有初始值设定项的构造函数中使用 vprintf/cstdarg 功能?