难以理解循环声明

时间:2016-04-13 21:12:38

标签: c++ circular-dependency

您好我正在尝试创建一个工厂方法,它返回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();
          ^

1 个答案:

答案 0 :(得分:0)

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