在c+中定义之前,按调用类初始化相应的类+; 我第一次在C++中试着找到问题,但我找不到好答案。你能帮我吗? 所以我的问题是在定义之前如何使用类
通过搜索和阅读我学到了什么 1.我可以只声明类名并使用它 2.我最好在未定义的类中使用指针 此代码是直角点和极点之间坐标系的可转换对应点 我在对应的RP上出错了在c+中定义之前,按调用类初始化相应的类+; 我第一次在C++中试着找到问题,但我找不到好答案。你能帮我吗? 所以我的问题是在定义之前如何使用类,c++,class,C++,Class,通过搜索和阅读我学到了什么 1.我可以只声明类名并使用它 2.我最好在未定义的类中使用指针 此代码是直角点和极点之间坐标系的可转换对应点 我在对应的RP上出错了 class RectangularPoint; // predefine class PolarPoint { public: double degree; double radialDistance; public: PolarPoint():degree(0), radialDistance(0), co
class RectangularPoint; // predefine
class PolarPoint
{
public:
double degree;
double radialDistance;
public:
PolarPoint():degree(0), radialDistance(0), correspondingRP_Defined(false), correspondingRP(new RectangularPoint()) {} // <--error
PolarPoint(double _degree, double _radialDistance):
degree(_degree),
radialDistance(_radialDistance),
correspondingRP_Defined(false),
correspondingRP(new RectangularPoint()){} // <--error
public:
void SetInfo(double _degree, double _radialDistance);
RectangularPoint* toRectangular();
private:
RectangularPoint *correspondingRP; // used pointer
bool correspondingRP_Defined;
};
class RectangularPoint
{
public:
double x;
double y;
public:
RectangularPoint(): x(0), y(0), correspondingRP_Defined(false), correspondingPP(new PolarPoint()) {}
RectangularPoint(double x, double y): x(x), y(y), correspondingRP_Defined(false), correspondingPP(new PolarPoint()) {}
public:
void SetInfo(double x, double y);
PolarPoint* toPolar();
private:
PolarPoint *correspondingPP;
bool correspondingRP_Defined;
};
PolarPoint* RectangularPoint::toPolar() {
if (correspondingRP_Defined) {
return correspondingPP;
} else {
...
return correspondingPP;
}
}
RectangularPoint* PolarPoint::toRectangular() {
if (correspondingRP_Defined) {
return correspondingRP;
} else {
...
return correspondingRP;
}
}
error: invalid use of incomplete type 'class RectangularPoint'
解决这个问题的好方法是什么?您不能,所以您必须将该构造函数拆分为一个声明:
PolarPoint(double _degree, double _radialDistance);
以及后面的定义(类定义之外):
你的书也应该有一个例子(和解释)
虽然这是一个相当常见的问题,但如果您可以完全消除循环“引用”(通过重新处理您的设计),那么就更好了
PolarPoint::PolarPoint(double _degree, double _radialDistance)
: degree(_degree)
, radialDistance(_radialDistance)
, correspondingRP_Defined(false)
, correspondingRP(new RectangularPoint())
{}