C ++从父类中返回子类

时间:2015-12-06 20:47:14

标签: inheritance

所以我有两个这样的课程

#pragma once
#include "B.h"
class A {
public:
    B getB() {}
};

#pragma once
#include "A.h"
class B : public A {

};

错误:'A'基类未定义。

两者都需要在另一个之前声明,所以我该如何解决这个问题?

如果您将代码重新排序到一个文件中,那么它看起来像这样:

#include <iostream>
using namespace std;
class B : public A {

};
class A {
public:
    B getB() {}
};

void main() {
    A a;
    B b = a.getB();
    system("pause");
}

但问题仍然存在......

1 个答案:

答案 0 :(得分:1)

  • 在继承中使用之前,应该完全定义一个类。
  • 在使用某个值(即成员,变量,输入参数,返回值)之前,应该完全定义一个类。

所以在这里你被困住了。通常的解决方法是通过引用/ pointer / shared_ptr返回类:

// Forward declaration
class B;

class A
{
  public:
   B& GetB();
};

class B : public A
{ /* ... */ }

B& A::GetB() { return a_b_from_somewhere; }

但请注意,在这种情况下你肯定要处理船东的问题(即谁拥有你返回的指针?)