难以理解循环声明

Having trouble to understand circular declaration

你好,我正在尝试创建一个工厂方法,returns class 的派生 class A,我无法理解循环声明,希望你能帮我解决这个问题。

谢谢。

AChildOne.cpp


#include "AChildOne.h"

AChildOne.h


#ifndef ACHILDONE_H
#define ACHILDONE_H
#include "A.h"

class A_CHILD_ONE : public A {
};

#endif

A.cpp


#include "A.h"

void A::a(){
    Factory::fact();
};

A.h


#ifndef A_H
#define A_H

#include "Factory.h"

class A {
    public:
      static void a();
};

#endif

Factory.cpp


#include "Factory.h"
A *Factory::fact(){
    return new A_CHILD_ONE;
}

Factory.h


#ifndef FACTORY_H
#define FACTORY_H

#include "A.h"
#include "AChildOne.h"

class Factory {
    public:
     static A *fact();
};

#endif

编译错误

g++ A.cpp Factory.cpp AChildOne.cpp -o test
In file included from Factory.h:5:0,
                 from A.h:4,
                 from A.cpp:1:
AChildOne.h:5:30: error: expected class-name before ‘{’ token
 class A_CHILD_ONE : public A {
                              ^
In file included from A.h:4:0,
                 from A.cpp:1:
Factory.h:9:10: error: ‘A’ does not name a type
   static A *fact();
          ^
A.cpp: In static member function ‘static void A::a()’:
A.cpp:4:2: error: ‘fact’ is not a member of ‘Factory’
  Factory::fact();
  ^
In file included from A.h:4:0,
                 from AChildOne.h:3,
                 from AChildOne.cpp:1:
Factory.h:9:10: error: ‘A’ does not name a type
   static A *fact();
          ^

Factory.h 中,您尝试包含 A.h;在 A.h 中,您尝试包含 Factory.h.

Factory.h 纳入 A.cpp 并从 A.h 中删除应该会有所帮助。

Factory 声明依赖于 A 接口。 A 声明不依赖于 Factory 声明,但 A 定义依赖。

另外,Factory.h 不需要知道 AChildOne.hFactory.cpp 需要。所以将 #include AChildOne.h 移动到 Factory.cpp.