我正在编译一个包含> 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指令后一切正常。
答案 0 :(得分:3)
但是,此文件存在于指定的路径
中
不,它没有。
虽然你是正确的,因为循环包含会导致一些误导性错误消息,但这不是其中之一。
要记住的一点是,包含路径的解析是实现定义的(2003:12.8 / 1),这可能是您看到工具链之间存在不一致的原因。使用相对路径特别好奇。简化您的源树和包含路径,这个问题就会消失。