类A有一个指向类B的指针,而类B的构造函数需要一个指向类A的指针(不同头文件中的类A和B)

时间:2019-05-04 15:03:12

标签: c++ class declaration circular-dependency forward-declaration

我有两个头文件(A.h包含类A,B.h包含类B)。 A类有一个指向B类的指针,而B类的构造函数需要一个指向A类的指针。

错误:使用未定义类型'A'

A.h:

#pragma once

#include "B.h"

class A {
public:
  B* ClassB;

  A(){
    ClassB = new B(this);
  }

  inline void FunctionFromA() {}

};


B.h:

#pragma once

class A;

class B  {
public:

  A* ClassA;

  B(A* classa) {
    ClassA = classa;
  }


  void DoSomethingfromA() {
    ClassA->FunctionFromA();
  }

};

编辑:

我找到了一种工作方式,它给出了一个错误“不允许输入不完整的类型”,但是仍然可以工作吗?.. i包括了类中的头文件

A.h:

#pragma once

class B;

class A {
public:

#include "B.h"  //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

  B* ClassB;

  A(){
    ClassB = new B(this);
  }

  inline void FunctionFromA() {}

};


B.h:

#pragma once



class B  {
public:

#include "A.h" //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<


  A* ClassA;

  B(A* classa) {
    ClassA = classa;
  }


  void DoSomethingfromA() {
    ClassA->FunctionFromA();
  }

};

1 个答案:

答案 0 :(得分:-2)

这将不起作用,因为C ++不允许您包含包含当前文件本身的文件。另外,重新定义类A将不起作用,因为除了您提供的声明外,编译器还不知道它。