誰かがC++のリンク/コーディングの難問で私を助けてくれませんか?
私はクラスShapeを持っています。Shapeは、クラスCenterのプライベートデータメンバーであるx座標とy座標を使用する必要があります。フレンドクラスShapeを宣言します。次に、Shape.hに#include"center.h"を追加します。Shape.cppで、c.xCordを使用するostream&operator <<(ostream&ostr、const Center&c)関数を定義します。c.yCordは、センターのプライベートデータメンバーにアクセスします。
Shape.cppをコンパイルしようとすると、Shapeをフレンドクラスとして宣言していないなど、これらのデータ変数のアクセスエラーが発生します。これはコンパイル時のリンク順序と関係があると思います。どうすればこれを修正できますか?
#ifndef CENTER_H
#define CENTER_H
class Center
{
public:
Center(double x, double y) { xCord = x; yCord = y; }
// constructor
friend class Shape;
// allow Shape to use Center's x and y values
private:
double xCord;
// X-coordinate
double yCord;
// Y-coordinate
};
#endif
#ifndef SHAPE_H
#define SHAPE_H
#include "center.h"
#include <iostream>
using namespace std;
class Shape
{
public:
Shape(double x, double y) : s_center(x, y) {}
// constructor
void moveCenter();
// moves the center of the shape
friend ostream& operator<< (ostream& ostr, const Center& c);
// allows the printing of the Center object
virtual void printCenter();
// returns the center of the shape
virtual double printArea();
// returns the area of the shape
virtual bool checkSurface(Shape& s) = 0;
// checks if the shape can fit into
// a given surface
virtual double findArea() = 0;
// calculates the area of the shape
private:
Center s_center;
// center of the shape
};
#endif
// in shape.cpp
ostream& operator<< (ostream& ostr, const Center& c)
{
ostr << "(" << c.xCord << ", " << c.yCord << ")";
return ostr;
}