有两个结构在C++中引用彼此的变量

Mic*_*iel 2 c++ struct

我有两个不同的结构,我想像这样彼此转换:

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在定义两个结构之前声明,然后使用指针.虽然我似乎无法访问变量xy指针,因为这些尚未定义.

有没有办法在定义它们之前将这些变量添加到struct声明中?或者有更好的方法来解决这个问题吗?

OMG*_*chy 9

首先,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=函数以返回引用而不是副本,但这超出了此问题/答案的范围.