私は> 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ポリシーは、このような大きなプロジェクトに適しています。
- (可能であれば)間違った順序でヘッダーを見つける方法
- 上記の問題を回避するためにこのプロジェクトを再編成する方法。
更新された結果:
あなたの有用なアドバイスありがとうございました。
申し訳ありませんが、私は完全に間違っていました。バグは実際にはの相対パスでの文字を含む..(ダブルドット)
すべてのインクルードディレクティブを書き換えても問題ありません。
循環依存関係は、 'fatal error:../../exception/ErrorOverflow.h:No such file or directory'のようなエラーメッセージを生成しません。コンパイラは、ファイルを見つけることができないそのパスに存在しないか、パスが正しくありません。 –
パスが存在し、正しいです。パスの正しさをチェックするのは間違った方法です。 – Johnas
特定の注文に含まれるヘッダーファイルには依存しないでください。エラーメッセージは、あなたがそれが何であるかをあなたに伝えていません。 –