我需要使用类似的变量从一个结构转换为另一个结构。 我在两个具有两个整数的结构的示例中对此进行了测试。
由于某种原因,它没有正确分配,我相信它正在发送一个本地副本然后被解除分配?我做错了什么?
谢谢!
#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;
}
答案 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;
}