私は同僚がコンパイルしたものを手に入れようとしています。本質的に、彼は大きなソフトウェアシステムから作る必要のある小さな実行可能ファイルの依存関係を減らそうとしていました。コンパイルの問題 - typedef、前方宣言、名前空間?
私はそれを完全に理解していないとして、私は完全に問題を説明できるかわからない...しかし、私はここで何が起こっているかを示すためにつもりです:
ライブラリA: ファイル:ああ
namespace CF {
typedef sometype B;
};
ライブラリC: ファイルChの
//Forward declare Class
class CF::B;
Class D {
public:
B* UseB();
};
ライブラリC: ファイルC.cpp
#include "C.h"
#include "A.h"
using CF::B;
B* D::UseB()
{
return new B;
}
申し訳ありませんが、私が知っている、これは少しクレイジーに見えますが、私たちは実際に扱っているファイルのセットからそれを簡素化しようとしています。
通常、CF :: Bで複数定義エラーが発生するか、コードを再生して周囲を変更すると、CPPファイルでCF:Bのタイプが認識されないことがあります。
私の最初の質問は、私が試したようにtypedefを宣言するか、BがCF名前空間のtypedefであるという事実に対処するための方法がありますか?それはChファイルに直接含まれていますか?
ヘッダーには適切なガードが含まれていますか? –
はい、すべて標準のインクルードガード(#ifndef #define #endif)を持っています。 –
ヘッダファイルに依存関係がないように、別のファイルからtypedefを宣言するにはどうすればよいですか?それはおそらく良い第一歩です。 –