包括来自不同库

Include from different library

本文关键字:包括      更新时间:2023-10-16

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

libA/src/...
libB/src/...
libC/src/...
src/...

libA、libB 等是分开编译的。

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

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

有什么解决方案吗?

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

有关详细信息,请参阅此提示。

编辑

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

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

#ifndef FACTORY_H_
#define FACTORY_H_

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

class Factory {
public:
    Factory();
    virtual ~Factory();
};
#endif /* FACTORY_H_ */

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