关于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>

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

相关推荐
李匠20241 小时前
C++GO语言微服务之图片、短信验证码生成及存储
开发语言·c++·微服务·golang
ll7788116 小时前
C++学习之路,从0到精通的征途:继承
开发语言·数据结构·c++·学习·算法
我不想当小卡拉米7 小时前
【Linux】操作系统入门:冯诺依曼体系结构
linux·开发语言·网络·c++
炎芯随笔7 小时前
【C++】【设计模式】生产者-消费者模型
开发语言·c++·设计模式
乌鸦9447 小时前
《类和对象(下)》
开发语言·c++·类和对象+
逐光沧海8 小时前
数据结构基础--蓝桥杯备考
数据结构·c++·算法·蓝桥杯
前进的程序员8 小时前
嵌入式开发中 C++ 跨平台开发经验与解决方案
开发语言·c++
菜一头包8 小时前
c++ std库中的文件操作学习笔记
c++·笔记·学习
吃个早饭10 小时前
2025年第十六届蓝桥杯大赛软件赛C/C++大学B组题解
c语言·c++·蓝桥杯
阿沁QWQ11 小时前
单例模式的两种设计
开发语言·c++·单例模式