【发布时间】:2015-07-14 12:28:14
【问题描述】:
我有 3 个属于命名空间“MyNS”的类。 “A”使用“B”和“C”,而“B”和“C”都使用“A”。这是我的标题的结构:
//mynamespace.h
#ifndef SOMENAMESPACE_H
#define SOMENAMESPACE_H
namespace MyNS {
class A;
class B;
class C;
}
#endif
/*******************************************************/
//A.h
#ifndef A_H
#define A_H
#include "mynamespace.h"
#include "B.h"
#include "C.h"
class MyNS::A {
..
MyNS::B someMethod(args);
MyNS::C someMethod2(args);
..
};
#endif
/*******************************************************/
//B.h
#ifndef B_H
#define B_H
#include "mynamespace.h"
#include "A.h"
class MyNS::B {
..
MyNS::A *someMember;
..
};
#endif
/*******************************************************/
//C.h
#ifndef C_H
#define C_H
#include "mynamespace.h"
#include "A.h"
class MyNS::C {
..
MyNS::A *someMember;
..
};
#endif
每个类都有一个包含以下行的 C++ 源文件:
using namespace MyNS;
编译器被 B.h 标头保护停止,这就是我在 A::someMethod(args) 中收到“不完整类型 'class B'”错误的原因。
我知道我可以在“mynamespace.h”中包含所有类定义,但是这些类很长,这使我的头文件变得臃肿,这就是为什么我不得不像这样将它们分开。
如何使这段代码与单独的头文件一起工作?
【问题讨论】:
-
你有什么问题?
-
如何让这段代码正常工作。
标签: c++ header namespaces include forward-declaration