C++ 重载运算符时出现SIGSEGV错误=

C++ 重载运算符时出现SIGSEGV错误=,c++,class,operator-overloading,C++,Class,Operator Overloading,_3DTocka是类的名称。代码编译后,程序在运行时立即给出SIGSEGV错误。。IDE转到move.h,第167行,代码:swap(\u-Tp&\u-a,\u-Tp&\u-b)Functionswap依次调用复制分配操作符。因此,您将得到运算符的递归调用。 您应该为将交换对象的每个数据成员的类定义自己的交换函数。函数swap依次调用复制分配操作符。因此,您将得到运算符的递归调用。 您应该为将交换对象的每个数据成员的类定义自己的交换函数。函数swap依次调用复制分配操作符。因此,您将得到运算符的

_3DTocka是类的名称。代码编译后,程序在运行时立即给出SIGSEGV错误。。IDE转到move.h,第167行,代码:swap(\u-Tp&\u-a,\u-Tp&\u-b)

Function
swap
依次调用复制分配操作符。因此,您将得到运算符的递归调用。
您应该为将交换对象的每个数据成员的类定义自己的交换函数。

函数
swap
依次调用复制分配操作符。因此,您将得到运算符的递归调用。
您应该为将交换对象的每个数据成员的类定义自己的交换函数。

函数
swap
依次调用复制分配操作符。因此,您将得到运算符的递归调用。
您应该为将交换对象的每个数据成员的类定义自己的交换函数。

函数
swap
依次调用复制分配操作符。因此,您将得到运算符的递归调用。
您应该为将交换对象的每个数据成员的类定义自己的交换函数。

这是一个无限递归。函数swap()的工作原理如下:

    _3DTocka operator=(_3DTocka _3D){
        swap(*this, _3D);
        return *this;
    }

//main()
_3DTocka _3Dx1(5, 9, 2), _3Dx2(_3Dx1); // first one is using constructor, second one copy constuctor and they both have 5,9,2
_3Dx1 = _3Dx2;
您必须将所有类属性从_3D分配到该类属性

void swap(Type & a, Type & b) {
    Type tmp = a;   \
    a = b;          -> here it calls your operator=  
    b = tmp;        /
}

或者您可以使用
memcpy(this,&_3D,sizeof(_3D))
,但前提是您的类不包含其他对象,而只包含基本类型。

这是一个无限递归。函数swap()的工作原理如下:

    _3DTocka operator=(_3DTocka _3D){
        swap(*this, _3D);
        return *this;
    }

//main()
_3DTocka _3Dx1(5, 9, 2), _3Dx2(_3Dx1); // first one is using constructor, second one copy constuctor and they both have 5,9,2
_3Dx1 = _3Dx2;
您必须将所有类属性从_3D分配到该类属性

void swap(Type & a, Type & b) {
    Type tmp = a;   \
    a = b;          -> here it calls your operator=  
    b = tmp;        /
}

或者您可以使用
memcpy(this,&_3D,sizeof(_3D))
,但前提是您的类不包含其他对象,而只包含基本类型。

这是一个无限递归。函数swap()的工作原理如下:

    _3DTocka operator=(_3DTocka _3D){
        swap(*this, _3D);
        return *this;
    }

//main()
_3DTocka _3Dx1(5, 9, 2), _3Dx2(_3Dx1); // first one is using constructor, second one copy constuctor and they both have 5,9,2
_3Dx1 = _3Dx2;
您必须将所有类属性从_3D分配到该类属性

void swap(Type & a, Type & b) {
    Type tmp = a;   \
    a = b;          -> here it calls your operator=  
    b = tmp;        /
}

或者您可以使用
memcpy(this,&_3D,sizeof(_3D))
,但前提是您的类不包含其他对象,而只包含基本类型。

这是一个无限递归。函数swap()的工作原理如下:

    _3DTocka operator=(_3DTocka _3D){
        swap(*this, _3D);
        return *this;
    }

//main()
_3DTocka _3Dx1(5, 9, 2), _3Dx2(_3Dx1); // first one is using constructor, second one copy constuctor and they both have 5,9,2
_3Dx1 = _3Dx2;
您必须将所有类属性从_3D分配到该类属性

void swap(Type & a, Type & b) {
    Type tmp = a;   \
    a = b;          -> here it calls your operator=  
    b = tmp;        /
}

或者您可以使用
memcpy(this,&_3D,sizeof(_3D))
,但前提是您的类不包含其他对象,而只包含基本类型。

所以,我不能使用swap和copy构造函数?我在这里读了一篇文章,说这是重载运算符=。所以,我不能有swap和copy构造函数?我在这里读了一篇文章,说这是重载运算符=。所以,我不能有swap和copy构造函数?我在这里读了一篇文章,说这是重载运算符=。所以,我不能有swap和copy构造函数?我在这里读到一篇文章,这是重载操作符=。