在另一个类的函数中返回一个类,反之亦然,编译错误(递归)

时间:2016-01-09 21:44:21

标签: c++ visual-c++

请有人轻松挣扎。我正在尝试组织两个类(Points)来返回他们方法中的相反类。笛卡尔点类具有返回极坐标的方法,反之亦然。

Point2D.h

#pragma once
#include "PointPolar2D.h"
class Point2D
{
private:
    double x;
    double y;

public:
    Point2D(double x, double y);

    PointPolar2D toPolar();

    ~Point2D();
};

Point2D.cpp

#include "stdafx.h"
#include "Point2D.h"
#include "PointPolar2D.h"


Point2D::Point2D(double x, double y) : x(x), y(y)
{
}

PointPolar2D Point2D::toPolar()
{
    return PointPolar2D(1, 4);
}

Point2D::~Point2D()
{
}

PointPolar2D.h

#pragma once
#include "Point2D.h"

class PointPolar2D
{
private:
    double radius;
    double angle;

public:
    PointPolar2D(double radius, double angle);

    Point2D toCartesian();

    ~PointPolar2D();
};

PointPolar2D.cpp

#pragma once
#include "Point2D.h"

class PointPolar2D
{
private:
    double radius;
    double angle;

public:
    PointPolar2D(double radius, double angle);

    Point2D toCartesian();

    ~PointPolar2D();
};

它无法编译。错误说明: toPolar:未知覆盖说明符以及之前的意外令牌;

请帮我弄明白原因。它必须是明显的或不是明显的。 如有需要,我会提供任何澄清。 感谢。

EDITED 创建了MCVE,正如@Amit所提议的那样。感谢。

1 个答案:

答案 0 :(得分:2)

从类的名称来看,我猜测PointPolar2DPoint2D的子类。

因此,PointPolar2D.h需要#include Point2D.h。你也有:

#include "PointPolar2D.h"
在Point2D.h中

。这是循环包含。它会导致各种各样的问题。

从Point2D.h中删除该行并添加前向声明。

class PointPolar2D;

您不需要完整的类定义来声明该函数。

PointPolar2D toPolar();

前瞻声明就足够了。

确保Point2D.cpp中的#include PointPolar2D.h。您需要PointPolar2D的定义来实现Point2D::toPolar