h和hpp问题,错误的顺序包括在内

时间:2011-07-17 13:22:59

标签: c++ header include compiler-errors

我正在编译一个包含> 500个类的大型项目。编译VS 2010后,没有任何问题。在Windows下使用g ++(Code :: Blocks / Netbeans)时,代码将无法编译,并显示以下错误:

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文件中,但在某些* .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

请告知:

  • 哪个标头/包含政策适用于这么大的项目。
  • 如何找到包含错误顺序的标题(如果可能的话)
  • 如何重组此项目以避免上述问题。

更新结果:

谢谢大家的有益建议。

对不起,我完全错了。一个错误实际上是在相对路径中包含字符..(双点)

重写所有include指令后一切正常。

1 个答案:

答案 0 :(得分:3)

  

但是,此文件存在于指定的路径

不,它没有。

虽然你是正确的,因为循环包含会导致一些误导性错误消息,但这不是其中之一。

要记住的一点是,包含路径的解析是实现定义的(2003:12.8 / 1),这可能是您看到工具链之间存在不一致的原因。使用相对路径特别好奇。简化您的源树和包含路径,这个问题就会消失。