Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/132.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在c+中定义之前,按调用类初始化相应的类+; 我第一次在C++中试着找到问题,但我找不到好答案。你能帮我吗? 所以我的问题是在定义之前如何使用类_C++_Class - Fatal编程技术网

在c+中定义之前,按调用类初始化相应的类+; 我第一次在C++中试着找到问题,但我找不到好答案。你能帮我吗? 所以我的问题是在定义之前如何使用类

在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

通过搜索和阅读我学到了什么 1.我可以只声明类名并使用它 2.我最好在未定义的类中使用指针

此代码是直角点和极点之间坐标系的可转换对应点 我在对应的RP上出错了

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())
{}