c++ - 不完整的类型/前向声明

c++ - incomplete type / forward declaration

这个问题已被问过很多次,但通常可以通过更改 classes 的顺序轻松解决。在我的情况下可能不是。

class GCRefLink;
class GCRef;

class GCRefLink {
  friend class GCRef;
private:
  GCRef * ref;
  GCRefLink(GCRef * ref) : ref(ref) {}
public:
  ~GCRefLink(){this->ref->unlink();}
};

class GCRef {
 friend class GCRefLink;
private:
  int refCount;

  GCRef() : refCount(0) {}
  virtual ~GCRef(){}

  void unlink(){--this->refCount;if(this->refCount==0) delete this;}
public:
  GCRefLink link(){++this->refCount;return GCRefLink(this);}
};

当我更改 classes 的顺序时,我在大约第二个 class 时遇到了同样的错误。它的意思是参考 class 由托管的、不可删除的 classes 继承,我知道 stl 中已经有这样的东西但是因为它是大学项目我需要实现我自己的。

我收到 invalid use of incomplete type 'class GCRef'invalid use of incomplete type 'class GCRefLink' 错误

~GCRefLink 析构函数实现放在第二个 class 之后(最好放在单独的 .cpp 文件中)是否错误?

class GCRef;

class GCRefLink {
    friend class GCRef;
private:
    GCRef * ref;
    GCRefLink(GCRef * ref) : ref(ref) {}
public:
    ~GCRefLink();
};

class GCRef {
    friend class GCRefLink;
private:
    int refCount;

    GCRef() : refCount(0) {}
    virtual ~GCRef(){}

    void unlink(){ --this->refCount; if (this->refCount == 0) delete this; }
public:
    GCRefLink link(){ ++this->refCount; return GCRefLink(this); }
};

GCRefLink::~GCRefLink(){ this->ref->unlink(); }