gpt4 book ai didi

c++ - h和hpp问题,包含顺序错误

转载 作者:行者123 更新时间:2023-11-30 03:06:22 24 4
gpt4 key购买 nike

我正在编译一个包含 >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 );
};

某些类 Position: 方法给出四舍五入结果

#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 /包含策略适合这样的大型项目。
  • 如何查找包含顺序错误的 header (如果可能的话)
  • 如何重组这个项目以避免上述问题。

更新结果:

感谢大家提供有用的建议。

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

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

最佳答案

However, this file exists in the specified path

不,它没有。

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

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

关于c++ - h和hpp问题,包含顺序错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6724062/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com