我必须创建一个可以从不同的库创建对象的工厂方法。我的目录树如下所示:
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,所以我不能创建它的实例。
这有什么解决方案吗?
答案 0 :(得分:1)
您正在寻找前向声明:在类只需要知道类型的标题中,使用class AFactory;
声明它,而不是包含整个Factory.h。
修改
重新阅读你的问题之后,我发现你希望库单独编译,libA工厂必须知道类libB这一事实之间存在矛盾。你不能单独编译,所以我只提供所有必要的目录路径来包含路径。
答案 1 :(得分:0)
我尝试重现此错误,但我的示例具有相同的目录结构,并且工作正常。
#ifndef FACTORY_H_
#define FACTORY_H_
#include "../../libB/src/Someclass.h"
class Factory {
public:
Factory();
virtual ~Factory();
};
#endif /* FACTORY_H_ */
当存在直接依赖时,如何单独编译它们?也许你想使用静态链接库。请解释一下你的意图。