1

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

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,所以我不能创建它的实例。

有什么解决办法吗?

4

2 回答 2

1

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

有关更多信息,请参阅此提示

编辑

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

于 2012-09-18T14:26:11.383 回答
0

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

#ifndef FACTORY_H_
#define FACTORY_H_


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


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

#endif /* FACTORY_H_ */

当存在直接依赖关系时,如何分别编译它们?也许您想使用静态链接库。请说明你的意图。

于 2012-09-18T14:53:06.450 回答