包括来自不同的图书馆

时间:2012-09-18 14:23:42

标签: c++ include

我必须创建一个可以从不同的库创建对象的工厂方法。我的目录树如下所示:

LIBA / SRC / ...
libB / src目录/ ...
的libC / src目录/ ...
SRC /...

libA,libB等是分开编译的。

让工厂类在libA / src / Factory.h中。它应该从libB / src / someclass.h创建一个对象。

如果我在Factory.h中包含../../libB/src/someclass.h,则libA无法编译,因为它无法从someclass.h中找到包含(编译器在libA / src中查找它们) ,但那些是在libB / src)如果我不包括,它不知道Someclass,所以我不能创建它的实例。

这有什么解决方案吗?

2 个答案:

答案 0 :(得分:1)

您正在寻找前向声明:在类只需要知道类型的标题中,使用class AFactory;声明它,而不是包含整个Factory.h。

See this tip for more info

修改

重新阅读你的问题之后,我发现你希望库单独编译,libA工厂必须知道类libB这一事实之间存在矛盾。你不能单独编译,所以我只提供所有必要的目录路径来包含路径。

答案 1 :(得分:0)

我尝试重现此错误,但我的示例具有相同的目录结构,并且工作正常。

#ifndef FACTORY_H_
#define FACTORY_H_


#include "../../libB/src/Someclass.h"


class Factory {
public:
    Factory();
    virtual ~Factory();
};

#endif /* FACTORY_H_ */

当存在直接依赖时,如何单独编译它们?也许你想使用静态链接库。请解释一下你的意图。