Я собираю большой проект, содержащий> 500 классов.После компиляции VS 2010 проблем не было.При использовании g ++ (Code :: Blocks / Netbeans) в Windows код не будет компилироваться со следующей ошибкой:
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 работает правильно.Символ / или \ в пути не имеет значения (проверено).
Если I изменить порядок включаемых файлов , вышеупомянутая ошибка исчезает, и аналогичная ошибка появляется в другом месте кода ...
Я думаю, что где-то в коде есть циклическая зависимость или неправильный порядок включаемых файлов.
Структура файла:
1) .cpp file
#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, но вДля некоторых файлов * .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
Пожалуйста, сообщите:
- какая политика заголовка / включения подходит для такого большого проекта.
- как найти заголовки с неправильным порядком включения (если это возможно)
- как реорганизоватьэтот проект, чтобы избежать вышеупомянутых проблем.
ОБНОВЛЕННЫЕ РЕЗУЛЬТАТЫ:
Спасибо всем за ваш полезный совет.
Iизвините, я был полностью неправНа самом деле была ошибка в относительном пути , содержащая символы .. (двойная точка)
После переписывания всех директив include все в порядке.