【发布时间】:2022-01-24 12:50:21
【问题描述】:
我目前正在努力使用赋值运算符。我总是想念一些东西。 你能帮帮我吗?
在这里查看 https://godbolt.org/z/rfvTqcjoT
class SpecialFloat
{
public:
explicit SpecialFloat(const float f);
SpecialFloat& operator=(const float f);
private:
float m_float;
};
SpecialFloat::SpecialFloat(const float f):
m_float(f)
{
}
SpecialFloat& SpecialFloat::operator=(const float f)
{
m_float = f;
}
int main()
{
SpecialFloat f = 1.0f;
}
为什么我的运算符重载不起作用?
<source>(27): error C2440: 'initializing': cannot convert from 'float' to 'SpecialFloat'
<source>(27): note: Constructor for class 'SpecialFloat' is declared 'explicit'
或者赋值运算符不能接受自定义类型吗?
【问题讨论】:
-
SpecialFloat f = 1.0f;不是赋值,而是构造。 -
您的问题出在构造函数中,这是明确的。 “SpecialFloat”类的构造函数声明为“显式”
-
支持@Eljay:从构造函数中删除
explicit(并修复赋值运算符)使您的代码编译:Test of Compiler Explorer -
啊好的谢谢你:)
-
与问题无关,但您在
operator=中忘记了return *this;