- 主题:[求助] 这个构造函数该怎么写...
想写个阻抗类如下,
class IMPEDANCE {
public:
IMPEDANCE(std::complex<float> z) : _z(z)
{
}
IMPEDANCE(void) : _z(0)
{
}
IMPEDANCE& operator=(const std::complex<float>& z)
{
this->_z = z;
return *this;
}
private:
std::complex<float> _z;
};
目前这几种初始化都正常
IMPEDANCE z1(18 - 45j);
IMPEDANCE z2(0);
IMPEDANCE z3;
z3 = 18 - 45j;
但是写 IMPEDANCE z4 = 18 + 45j; 就会报错,
app.cc:38:23: error: conversion from '__complex__ int' to non-scalar type 'IMPEDANCE' requested
我应该是还漏了什么...
--
FROM 222.129.0.*
看起来缺了一个 std::complex<int> 类型的复制构造函数
似乎可以考虑将你的类模板化
【 在 tom6bj 的大作中提到: 】
: 想写个阻抗类如下,
: class IMPEDANCE {
: public:
: ...................
--
FROM 120.253.228.*
等式右边先用你第一个构造函数构造下
【 在 tom6bj (tom) 的大作中提到: 】
: 想写个阻抗类如下,
: class IMPEDANCE {
: public:
: IMPEDANCE(std::complex<float> z) : _z(z)
--
FROM 222.129.0.*
18 + 45j, 不是18 + 45i 吗?
std::complex_literals里是用的i还是j?
--
FROM 222.130.138.*
右边加上std::complex<float>(18 + 45j)当然就没问题了
不过能少写这几个字更好嘛
【 在 naper 的大作中提到: 】
等式右边先用你第一个构造函数构造下
【 在 tom6bj (tom) 的大作中提到: 】
: 想写个阻抗类如下,
: class IMPEDANCE {
: public:
: IMPEDANCE(std::complex<float> z) : _z(z)
--
FROM 222.129.0.*
不是这个问题吧, 写成IMPENDANCE z = 18.0f + 45.0fj也是不行的
app.cc:41:26: error: conversion from '__complex__ float' to non-scalar type 'IMPEDANCE' requested
模板化试试 @@
【 在 easior 的大作中提到: 】
看起来缺了一个 std::complex<int> 类型的复制构造函数
似乎可以考虑将你的类模板化
【 在 tom6bj 的大作中提到: 】
: 想写个阻抗类如下,
: class IMPEDANCE {
: public:
: ...................
--
FROM 222.129.0.*
MSVS 2022 下述代码可行
#include <complex>
using namespace std::complex_literals;
class IMPEDANCE {
public:
IMPEDANCE( std::complex< float > z ) : _z( z ) {}
IMPEDANCE( void ) : _z( 0 ) {}
IMPEDANCE& operator=( const std::complex< float >& z )
{
this->_z = z;
return *this;
}
private:
std::complex< float > _z;
};
int main()
{
IMPEDANCE z4 = 18.0f + 45.0if;
return 0;
}
【 在 tom6bj 的大作中提到: 】
: 不是这个问题吧, 写成IMPENDANCE z = 18.0f + 45.0fj也是不行的
: app.cc:41:26: error: conversion from '__complex__ float' to non-scalar type 'IMPEDANCE' requested
: 模板化试试 @@
: ...................
--
FROM 120.253.228.*
确实是 i 不是 j
楼主的那个错误似乎是 operator+ 默认没有重载 std::complex<int> 造成的
访问 cppreference 的速度太慢,没法看个仔细
【 在 z16166 的大作中提到: 】
: 18 + 45j, 不是18 + 45i 吗?
: std::complex_literals里是用的i还是j?
--
FROM 120.253.228.*
std::literals::complex_literals::operator""i,这个literal没有int的重载
std::literals::complex_literals::operator""if,这个是针对float的重载,
所以楼主的写法应该是:
using namespace std::complex_literals;
IMPEDANCE z1(18.0f - 45.0if);
IMPEDANCE z2(18.0f + 45.0if);
实部和虚部都需显式指明用float。
【 在 easior 的大作中提到: 】
: 确实是 i 不是 j
: 楼主的那个错误似乎是 operator+ 默认没有重载 std::complex<int> 造成的
: 访问 cppreference 的速度太慢,没法看个仔细
: ...................
--
FROM 222.130.138.*