这是一个最小的例子。我有一个基类,需要了解派生类。反过来,派生类需要知道基类。那么我该如何定义它们,以使他们知道彼此的存在?

class Base {
  Deriving* d;
public:
  Base(Deriving* deriving) {
    d = deriving;
  }
  void f() {
    d->g();
  }
};

class Deriving : public Base {
public:
  Deriving() : Base(this) {}
  g();
};


这是我尝试过的内容以及编译器说的内容:
首先定义Base会导致error: 'Deriving' does not name a type。首先定义Deriving会导致error: expected class-name before '{' token。声明BaseDeriving的类型不完整会导致error: invalid use of incomplete type 'class X'。我不知道还能尝试什么。

任何帮助是极大的赞赏。

最佳答案

在Base中,只有函数f需要知道类Deriving的定义,因此请在定义Deriving之后对其进行定义。

class Deriving;

class Base {
      Deriving* d;
    public:
      Base(Deriving* deriving) {
        d = deriving;
      }
      void f();
};

class Deriving : public Base {
    public:
      Deriving() : Base(this) {}
      void g();
};

void Base::f()
{
    d->g();
}

关于c++ - 具有指向派生对象的指针的基类:如何分辨彼此的存在?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36900580/

10-09 09:34