请有人轻松挣扎。我正在尝试组织两个类(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所提议的那样。感谢。
答案 0 :(得分:2)
从类的名称来看,我猜测PointPolar2D
是Point2D
的子类。
因此,PointPolar2D.h需要#include
Point2D.h。你也有:
#include "PointPolar2D.h"
在Point2D.h中。这是循环包含。它会导致各种各样的问题。
从Point2D.h中删除该行并添加前向声明。
class PointPolar2D;
您不需要完整的类定义来声明该函数。
PointPolar2D toPolar();
前瞻声明就足够了。
确保Point2D.cpp中的#include
PointPolar2D.h。您需要PointPolar2D
的定义来实现Point2D::toPolar
。