2011-07-17 10 views
1

私は> 500クラスを含む大きなプロジェクトをコンパイルしています。 VS 2010をコンパイルした後も問題はありませんでした。 WindowsでG ++(コード::ブロック/ Netbeansの)を使用する場合のコードは次のエラーでコンパイルされません。hとhppの問題、間違った順番を含む

library/source/algorithms/file/../../algorithms/graph/../algebra/../spheredistance 
/file.hpp:31:51: fatal error: ../../exception/ErrorOverflow.h: No such file or directory. 
Compilation terminated. 

をただし、このファイルは指定されたパスに存在します。 Linuxのバージョンは正しく動作します。 パスの文字/または\は問題ではありません(テスト済み)。

私はインクルードファイルの順序を変更する場合は、上記のエラーが消え、同様のエラーが他の場所コードで表示されます...

私はどこかにコード内で循環依存や間違った順序があると思い含まれるファイルの数。

ファイル構造:

1).cppファイル

#include "file.h" 

2).hファイル

#ifndef file_H 
#define file_H 

template <typename T> 
class Class 
{ 
}; 

#include "file.hpp" 
#endif 

3).HPPファイル

#ifndef file_HPP 
#define file_HPP 

#include "../../somefile.h" 

template <typename T> 
class Class 
{ 

}; 

#endif 

ヘッダのほとんどファイル* .hは* .hppファイルに含まれています.bいくつかの* .hファイルには、別の* .hファイルを含める必要があります。短くて簡単な例、結果のオン/オフを丸め説明:

Orientation.h 
#ifndef Orientation_H 
#define Orientation_H 


typedef enum 
{ 
    RoundOn, RoundOff 
} TRound; 


class Orientation 
{ 
    public: 
      template <typename T> 
      static short getOrientation(const T dx1, const T dy1, const T dx2, const T dy2, const TRound round = RoundOff); 
}; 

いくつかのクラスのポジションを:メソッドはラウンドできますオン/オフラウンド

#include "Orientation.hpp" 

Position.hpp 
#ifndef Position_H 
#define Position_H 

#include "../orientation/Orientation.h" //must be included for Rounding 


class Position 
{ 
    public: 
      template <typename Point1, typename Point2> 
      static unsigned short getPosition (const Point1 * p, const Point2 * p1, const Point2 * p2, const TRoundType round); 
}; 

#include "Position.hpp" 

#endif 

を結果教えてください:

  • header/includeポリシーは、このような大きなプロジェクトに適しています。
  • (可能であれば)間違った順序でヘッダーを見つける方法
  • 上記の問題を回避するためにこのプロジェクトを再編成する方法。

更新された結果:

あなたの有用なアドバイスありがとうございました。

申し訳ありませんが、私は完全に間違っていました。バグは実際にはの相対パスでの文字を含む..(ダブルドット)

すべてのインクルードディレクティブを書き換えても問題ありません。

+5

循環依存関係は、 'fatal error:../../exception/ErrorOverflow.h:No such file or directory'のようなエラーメッセージを生成しません。コンパイラは、ファイルを見つけることができないそのパスに存在しないか、パスが正しくありません。 –

+0

パスが存在し、正しいです。パスの正しさをチェックするのは間違った方法です。 – Johnas

+1

特定の注文に含まれるヘッダーファイルには依存しないでください。エラーメッセージは、あなたがそれが何であるかをあなたに伝えていません。 –

答えて

3

However, this file exists in the specified path

いいえ、それはありません。

間違ったエラーメッセージが表示される可能性はありますが、これは1つでもありません。

インクルージョンパスの解像度が実装定義(2003:12.8/1)であることが、ツールチェーン全体で矛盾している可能性があります。相対パスの使用は特に興味があります。ソースツリーとインクルージョンパスを単純化すると、この問題は解決されます。

+0

申し訳ありませんが、私は完全に間違っていました。バグは実際には文字を含む相対パスにありました..(二重点)。ご協力いただきありがとうございます。 – Johnas

+0

@Johnas:問題ありません。これをあなたに教訓にしましょう。 :P –

+0

はい、それはでした:-))) – Johnas

関連する問題