Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/137.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 重载类型转换运算符_C++_C++11 - Fatal编程技术网

C++ 重载类型转换运算符

C++ 重载类型转换运算符,c++,c++11,C++,C++11,重载了typecast运算符int,但在编译和运行代码后,我得到了分段错误 我调试了我的程序,看到使用typecast的代码行在每次调用typecast函数本身时都会无休止地重复。有人能解释一下周围发生了什么吗 /* IN HEADER */ class ComplexNumber { private: double m_real, m_imaginary; public: ComplexNumber(double real = 0.0, double imaginary =

重载了typecast运算符int,但在编译和运行代码后,我得到了分段错误

我调试了我的程序,看到使用typecast的代码行在每次调用typecast函数本身时都会无休止地重复。有人能解释一下周围发生了什么吗

/* IN HEADER */
class ComplexNumber
{
private:
    double m_real, m_imaginary;

public:
    ComplexNumber(double real = 0.0, double imaginary = 0.0);
    ComplexNumber(const ComplexNumber &obj);

    ComplexNumber& operator= (const ComplexNumber &obj);

    operator int();

};

ComplexNumber::ComplexNumber(double real, double imaginary): 
    m_real(real), m_imaginary(imaginary)
{

}

ComplexNumber::ComplexNumber(const ComplexNumber &obj): 
m_real(obj.m_real), m_imaginary(obj.m_imaginary)
{

}

ComplexNumber& ComplexNumber::operator= (const ComplexNumber &obj)
{
    m_real = obj.m_real;
    m_imaginary = obj.m_imaginary;

    return *this;
}

ComplexNumber::operator int()
{
    m_real = static_cast<int>(m_real);
    m_imaginary = static_cast<int>(m_imaginary);

    return *this;
}

/* IN MAIN */
ComplexNumber obj(3.4, 5.6);

obj = static_cast<int>(obj);
//here it gives seg fault
头文件中的
/**/
类复合数
{
私人:
双m_实,m_虚;
公众:
复数(双实=0.0,双虚=0.0);
复杂编号(常数复杂编号和obj);
ComplexNumber和operator=(const ComplexNumber和obj);
运算符int();
};
ComplexNumber::ComplexNumber(双实、双虚):
m_实(实)、m_虚(虚)
{
}
ComplexNumber::ComplexNumber(常量ComplexNumber和obj):
m_real(obj.m_real),m_virtual(obj.m_virtual)
{
}
ComplexNumber和ComplexNumber::operator=(常量ComplexNumber和obj)
{
m_real=对象m_real;
m_Imaginate=对象m_Imaginate;
归还*这个;
}
ComplexNumber::运算符int()
{
m_real=静态(m_real);
m_Imaginate=静态(m_Imaginate);
归还*这个;
}
/*大体上*/
复合物编号obj(3.4,5.6);
obj=静态铸件(obj);
//这里给出了seg故障

中的
返回*this
函数的code>,
*这是一个
ComplexNumber
。由于函数必须返回
int
,因此
返回将导致转换为
int


因此,我们有一个
ComplexNumber
int
的隐式转换,这导致调用
ComplexNumber::operator int()

operator int
应该返回一个int。也许您需要类似于
ComplexNumber ComplexNumber::clamp(){返回ComplexNumber(static_cast,m_real),static_cast(m_Imaginate));}
?@Artyer它与*相同,给出seg错误。我希望您指的是运算符int()而不是clamp()。谢谢你的解释,那么我如何才能解决它不会重复转换?我希望typecast函数更改对象的值并返回它,但当我返回对象本身时,它仍然会进行类型转换。因此,无穷大。@BejanMuhidinov:定义转换函数是为了将对象转换为
int
。它是不用于将对象中的内容转换为
int
值。为此,只需使用您选择的名称定义一个普通函数,如
ToLatticePoint
,该函数返回一个
ComplexNumber
,并在其组件中包含所需的值。@EricPostischil oow,我现在知道了,认为转换函数是用于转换thin的gs在对象到int中。非常感谢您的解释!