如何从一个结构转换为不同的结构?

时间:2015-06-09 07:24:54

标签: c++

我需要使用类似的变量从一个结构转换为另一个结构。 我在两个具有两个整数的结构的示例中对此进行了测试。

由于某种原因,它没有正确分配,我相信它正在发送一个本地副本然后被解除分配?我做错了什么?

谢谢!

#include <iostream>
using namespace std;


struct a
{
    int x, y;

    a(){}

    a(int _x, int _y)
    {
        x = _x;
        y = _y;
    }
};

struct b
{
    int x, y;

    b(){}

    b(int _x, int _y)
    {
        x = _x;
        y = _y;
    }

    b& operator=(const a& _a)
    {
        return b(_a.x, _a.y);
    }
};



int main()
{
    a a_test(1,2);
    b b_test;

    b_test = a_test;

    std::cout << "a: " << a_test.x << "," << a_test.y << endl;
    std::cout << "b: " << b_test.x << "," << b_test.y << endl;
    return 0;
}

1 个答案:

答案 0 :(得分:3)

  b& operator=(const a& _a)
  {
      return b(_a.x, _a.y);
  }

您正在创建b的本地副本并返回对它的引用。该本地副本将在范围结束时销毁。

你可能想做什么:

b& operator=(const a& _a)
{
    x = _a.x;
    y = _a.y;
    return *this;
}

赋值操作符的意思是为现有对象分配新值。它是一个成员函数,因此它可以直接访问对象内部。因此,您只需更改其成员并返回对自身的引用即可进行进一步更改。

修改以在评论中解决如何对class a执行相同操作的问题:

你需要转发声明类b。您还需要在头文件和源文件之间拆分声明和定义,因为当您编写定义时,编译器需要知道class b的外观。

标题

class b;

struct a
{
    int x, y;

    a(){}

    a(int _x, int _y)
    {
        x = _x;
        y = _y;
    }

    a& operator=(const b& _b);
};

在cpp

a& a::operator=(const b& _b)
{
    x = _b.x;
    y = _b.y;
    return *this;
}