1

さまざまなライブラリからオブジェクトを作成できるファクトリメソッドを作成する必要があります。私のディレクトリツリーは次のようになります。

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

libA、libBなどは別々にコンパイルされます。

ファクトリクラスをlibA/src/Factory.hに配置します。libB / src/someclass.hからオブジェクトを作成する必要があります。

Factory.hに../../libB/src/someclass.hをインクルードすると、someclass.hからインクルードが見つからないため、libAはコンパイルできません(コンパイラーは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 に答える