我有一個基類Point
我從Point3D
繼承。但是,由於某些原因,類Point
必須始終返回Point3D
作爲操作add
,因此我將它包含在我的包含中。基類有不完整類型
這是我Point
類:
#ifndef POINT_H
#define POINT_H
#include "Point3D.hpp"
class Point{
public:
Point(double, double, double);
void print() const;
Point3D add(const Point&);
protected:
double mX;
double mY;
double mZ;
};
#endif
在我Point3D
類,我知道我會還沒有遇到過的Point
定義時,我會先被調用(因爲Point3D
包括在Point
頭) ,所以我定義class Point;
,然後我確定我會用Point
部分:
#ifndef POINT3D_H
#define POINT3D_H
#include <iostream>
#include "Point.hpp" // leads to the same error if ommitted
class Point;
class Point3D : public Point {
public:
Point3D(double, double, double);
void print() const ;
Point3D add(const Point&);
};
#endif
但是,這是行不通的。當我編譯它,它給了我下面的錯誤:
./tmp/Point3D.hpp:9:24: error: base class has incomplete type
class Point3D : public Point {
~~~~~~~^~~~~
./tmp/Point3D.hpp:7:7: note: forward declaration of 'Point'
class Point;
^
1 error generated.
問題here會說從我Point3D
聲明中刪除包括#include "Point.hpp"
。但是,這樣做會產生相同的結果,我認爲頭衛隊基本上可以完成同樣的任務。
我在用叮噹語編譯。
您已經點和三維點之間的循環依賴。 Point應該只適用於Point類型,然後Point3D應該添加,重載/隱藏特定的成員。 –
當然,這是我在學校做的一項任務的一部分,教授特別提出了這種行爲。 – AntoineG