我有两个不同的结构,我想像这样彼此转换:
PointI a = PointI(3,5);
PointF b = a;
Run Code Online (Sandbox Code Playgroud)
我假设我需要做类似下面的代码:
struct PointF
{
PointF operator=(PointI point){
x = point.x;
y = point.y;
return *this;
}
float x, y;
};
struct PointI
{
PointI operator=(PointF point)
{
x = point.x;
y = point.y;
return *this;
}
int x, y;
};
Run Code Online (Sandbox Code Playgroud)
但问题是在宣布之前PointF使用PointI.从我在其他问题中读到的内容,我理解我可以PointI在定义两个结构之前声明,然后使用指针.虽然我似乎无法访问变量x和y指针,因为这些尚未定义.
有没有办法在定义它们之前将这些变量添加到struct声明中?或者有更好的方法来解决这个问题吗?
首先,forward声明其中一个结构并完全声明另一个结构.您需要为前向声明类型使用引用或指针,因为编译器还没有它的定义:
struct PointI;
struct PointF
{
PointF operator=(const PointI& point);
float x, y;
};
Run Code Online (Sandbox Code Playgroud)
接下来,您需要完全声明您声明的结构:
struct PointI
{
PointI operator=(const PointF& point);
int x, y;
};
Run Code Online (Sandbox Code Playgroud)
现在,您可以继续operator=为每个功能定义功能:
PointF PointF::operator=(const PointI& point)
{
x = point.x;
y = point.y;
return *this;
}
PointI PointI::operator=(const PointF& point)
{
x = point.x;
y = point.y;
return *this;
}
Run Code Online (Sandbox Code Playgroud)
请注意,您应该更改operator=函数以返回引用而不是副本,但这超出了此问题/答案的范围.
| 归档时间: |
|
| 查看次数: |
1447 次 |
| 最近记录: |