关于C/C++头文件引起的编译问题

在 C++ 中,#include 是用于包含头文件的预处理指令。头文件是包含函数声明、类定义、常量等的文件,通常以 .h.hpp 作为文件扩展名。

#include 可以使用两种形式来包含头文件:

  1. 使用双引号 ("):

    cpp 复制代码
    #include "CESO.h"

    当使用双引号括起头文件名时,编译器会首先在当前源文件所在目录中查找该头文件。如果找不到,则会继续在其他包含路径中查找。

  2. 使用尖括号 (<>):

    cpp 复制代码
    #include <CESO.h>

    当使用尖括号括起头文件名时,编译器会在系统的标准头文件目录中查找该头文件。这些标准目录通常是在编译器安装时设置好的。

因此,双引号表示相对路径或自定义头文件的包含,而尖括号表示系统标准头文件的包含。

当你需要包含自己编写的头文件时,通常使用双引号形式。例如,如果 CESO.h 和当前源文件位于同一目录下,你可以使用 #include "CESO.h" 来包含该头文件。如果你需要包含系统提供的头文件,例如 <iostream><vector> 等,你应该使用尖括号形式,如 #include <iostream>

需要注意的是,使用尖括号形式时,编译器只会在系统标准头文件目录中查找头文件,而不会在当前源文件所在目录中查找。如果你的头文件不在系统标准目录中,而是在自定义目录中,你可以通过设置编译器的包含路径来告诉编译器在哪里查找头文件。


以上是一些关于引用头文件时,使用双引号和尖括号的区别。

在实际操作中,建议先把尖括号的引用放前面,双引号的头文件放最后,今天再编译时遇到一个问题,如果先把双引号的头文件放前面,会导致statistical_outlier_removal中一个函数ambiguous,很奇怪,只要把顺序调整一下就可以成功编译。

cpp 复制代码
#include <pcl/io/pcd_io.h>
#include <pcl/io/ply_io.h>
#include <pcl_conversions/pcl_conversions.h>
#include <pcl/PCLPointCloud2.h>
#include <pcl/filters/voxel_grid.h>
#include <pcl/filters/passthrough.h>
#include <pcl/filters/statistical_outlier_removal.h>
#include <pcl/common/transforms.h>
#include <pcl/filters/frustum_culling.h>

#include "CESO.h"
#include "generateMap.h"

...

报错如下:

In file included from /usr/include/flann/algorithms/all_indices.h:35:0,
                 from /usr/include/flann/flann.hpp:45,
                 from /usr/include/pcl-1.8/pcl/kdtree/flann.h:50,
                 from /usr/include/pcl-1.8/pcl/kdtree/kdtree_flann.h:45,
                 from /usr/include/pcl-1.8/pcl/search/kdtree.h:44,
                 from /usr/include/pcl-1.8/pcl/search/pcl_search.h:44,
                 from /usr/include/pcl-1.8/pcl/filters/statistical_outlier_removal.h:44,
                 from /home/will/25omni_ws/src/gazebo_mobile_manipulator/src/find_closest_point/CESO_main.cpp:20:
/usr/include/flann/algorithms/nn_index.h: In member function 'int flann::NNIndex<Distance>::knnSearch(const flann::Matrix<typename Distance::ElementType>&, flann::Matrix<int>&, flann::Matrix<typename Distance::ResultType>&, size_t, const flann::SearchParams&) const':
/usr/include/flann/algorithms/nn_index.h:374:6: error: reference to 'flann' is ambiguous
      flann::Matrix<size_t> indices_(new size_t[indices.rows*indices.cols], indices.rows, indices.cols);

在自己写的两个头文件中添加的头文件如下:

  • CESO.h
cpp 复制代码
#include <iostream>
#include <vector>
#include <cmath>
#include <algorithm>
#include <opencv2/opencv.hpp>
#include <limits>
#include <iostream>
#include <math.h>
#include <ctime>
  • generateMap.h
cpp 复制代码
#include <iostream>
#include <opencv2/opencv.hpp>

有知道原因的大神,欢迎留言交流,感激不尽

相关推荐
黑不溜秋的16 分钟前
C++ 语言特性29 - 协程介绍
开发语言·c++
一丝晨光21 分钟前
C++、Ruby和JavaScript
java·开发语言·javascript·c++·python·c·ruby
￴ㅤ￴￴ㅤ9527超级帅35 分钟前
LeetCode hot100---二叉树专题(C++语言)
c++·算法·leetcode
_GR1 小时前
每日OJ题_牛客_牛牛冲钻五_模拟_C++_Java
java·数据结构·c++·算法·动态规划
Death2001 小时前
Qt 中的 QListWidget、QTreeWidget 和 QTableWidget:简化的数据展示控件
c语言·开发语言·c++·qt·c#
六点半8881 小时前
【C++】速通涉及 “vector” 的经典OJ编程题
开发语言·c++·算法·青少年编程·推荐算法
coduck_S12004zbj2 小时前
csp-j模拟五补题报告
c++·算法·图论
Death2002 小时前
Qt 3D、QtQuick、QtQuick 3D 和 QML 的关系
c语言·c++·qt·3d·c#
sukalot2 小时前
windows C++-windows C++-使用任务和 XML HTTP 请求进行连接(二)
c++·windows
qianbo_insist3 小时前
simple c++ 无锁队列
开发语言·c++