如何从一个结构转换到另一个结构

How to convert from one struct to different struct?

本文关键字:结构 一个 转换 另一个      更新时间:2023-10-16

我需要将一个结构体转换为另一个具有类似变量的结构体。我在一个有两个int型的结构体的例子上进行测试。

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

谢谢!

#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;
}
  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;
}