【问题标题】:compilation error when including directory containing headers包含包含标头的目录时出现编译错误
【发布时间】:2012-04-25 21:55:25
【问题描述】:

我有一个目录maths,它是一个仅由头文件组成的库。 我正在尝试通过在我的主目录中运行以下命令来编译我的程序:

g++ -I ../maths prog1.cpp prog2.cpp test.cpp -o et -lboost_date_time -lgsl -lgslcblas

但我得到以下编译错误:

prog1.cpp:4:23: fatal error: maths/Dense: No such file or directory
compilation terminated.
prog2.cpp:6:23: fatal error: maths/Dense: No such file or directory
compilation terminated.

maths 与 .cpp 文件位于同一目录(即我的主目录)中,我也在我的家中运行编译行。

prog1.cpp 和 prog2.cpp 具有以下标头 #include<maths/Dense> 分别在第 4 行和第 6 行,因此出现错误。

我该如何解决。

【问题讨论】:

  • 你确定不是 Dense.h 或 Dense.hpp?
  • @chris,解决了它...谢谢!

标签: c++


【解决方案1】:

您可以将包含路径更改为 -I.. 或将包含路径更改为 #include <Dense>

等一下,如果 maths 与源文件位于同一目录中并且这是您的当前目录,您可以将包含路径更改为 -I. 或将包含路径更改为 #include "Dense"

【讨论】:

    【解决方案2】:

    maths 与 .cpp 文件位于同一目录(即我的主目录)中

    您的包含路径为-I ../maths。你需要-I ./maths——或者更简单,-I maths,因为maths 是当前目录的子目录,而不是父目录的子目录。对吧?

    然后在您的 C++ 文件中,使用#include <Dense>。如果要使用#include <maths/Dense>,则需要调整包含路径。但是,使用-I. 可能会导致大量问题1,我强烈建议反对。

    相反,通常的做法是包含一个 include 子目录。因此,您的文件夹结构最好如下所示:

    ./
    + include/
    | + maths/
    |   + Dense
    |
    + your_file.cpp
    

    然后使用-I include,并在您的C++ 文件中使用#include <maths/Dense>。


    1) 考虑一下如果你有一个文件./map.cpp 并从中生成一个名为./map 的可执行文件会发生什么。只要您在代码中的任何位置使用#include <map>,这将尝试包含./map 而不是map 标准标头。

    【讨论】:

      猜你喜欢
      • 2017-06-08
      • 1970-01-01
      • 2015-03-23
      • 1970-01-01
      • 1970-01-01
      • 2012-09-18
      • 1970-01-01
      • 2021-12-20
      • 1970-01-01
      相关资源
      最近更新 更多