难以理解循环声明
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.h
但 Factory.cpp
需要。所以将 #include AChildOne.h
移动到 Factory.cpp
.
你好,我正在尝试创建一个工厂方法,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.h
但 Factory.cpp
需要。所以将 #include AChildOne.h
移动到 Factory.cpp
.