2012-05-11 7 views
1

私は階層という言葉を使いましたが、それが正しいかどうかはわかりません!私に説明させてください。gccはインクルードファイルの階層を尊重しません

私はああを持っている:

#include "A.h" 
#include "B.h" 

そしてX.cpp:

最後に私があるのXhを、持っている

typedef vector<int> int_vector; 
int_vector my_function(int x, int y); 

:私はBhのを持っている

#include <iostream> 
#include <vector> 
using namespace std; 

#include "X.h" 

// and the rest 

しかし、GCCでコンパイルすると、B.hで定義されていないベクトルなどと表示されます。これは問題を説明するための例であることに注意してください。私がLinux上でコンパイルするために変換しようとしているプロジェクトは、Visual Studioの下でWindows上で完全にコンパイルされます。

私はファイルを変更することができましたが、300以上のファイルプロジェクトですので、非常に効率的なヘルプや提案はありますか?

答えて

0

投稿したコードに問題はありません。gccにこのような不具合があるとは思われません。

もっと問題があるように見えます。たとえば、A.h(またはB.hまたはX.h)個のファイルがプロジェクトにあり、間違ったファイルがどこかに含まれている可能性があります。

私の助言は、問題のある.cppファイルをプリプロセッサ(gcc -E)で実行し、その結果を調べることです。それは、いつ何が含まれているかを正確に伝えます。

+0

このエラーは愚かでした。いくつかの#if #else #endif部分では、コードのブロックが名前空間の括弧を早く閉じていたので、すべてをスティープさせる原因になりました!通常、それはコンパイルすると考えられます。私はそのアプローチを以前に使っていました。そして、OpenGL(少なくとも1つのバージョン)に共通しています。 – widgg

関連する問題