在 C++ 中,#include
是用于包含头文件的预处理指令。头文件是包含函数声明、类定义、常量等的文件,通常以 .h
或 .hpp
作为文件扩展名。
#include
可以使用两种形式来包含头文件:
-
使用双引号 (
"
):#include "CESO.h"
当使用双引号括起头文件名时,编译器会首先在当前源文件所在目录中查找该头文件。如果找不到,则会继续在其他包含路径中查找。
-
使用尖括号 (
<>
):#include <CESO.h>
当使用尖括号括起头文件名时,编译器会在系统的标准头文件目录中查找该头文件。这些标准目录通常是在编译器安装时设置好的。
因此,双引号表示相对路径或自定义头文件的包含,而尖括号表示系统标准头文件的包含。
当你需要包含自己编写的头文件时,通常使用双引号形式。例如,如果 CESO.h
和当前源文件位于同一目录下,你可以使用 #include "CESO.h"
来包含该头文件。如果你需要包含系统提供的头文件,例如 <iostream>
、<vector>
等,你应该使用尖括号形式,如 #include <iostream>
。
需要注意的是,使用尖括号形式时,编译器只会在系统标准头文件目录中查找头文件,而不会在当前源文件所在目录中查找。如果你的头文件不在系统标准目录中,而是在自定义目录中,你可以通过设置编译器的包含路径来告诉编译器在哪里查找头文件。
以上是一些关于引用头文件时,使用双引号和尖括号的区别。
在实际操作中,建议先把尖括号的引用放前面,双引号的头文件放最后,今天再编译时遇到一个问题,如果先把双引号的头文件放前面,会导致statistical_outlier_removal
中一个函数ambiguous,很奇怪,只要把顺序调整一下就可以成功编译。
#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 ambiguousflann::Matrix<size_t> indices_(new size_t[indices.rows*indices.cols], indices.rows, indices.cols);
在自己写的两个头文件中添加的头文件如下:
- CESO.h
#include <iostream>
#include <vector>
#include <cmath>
#include <algorithm>
#include <opencv2/opencv.hpp>
#include <limits>
#include <iostream>
#include <math.h>
#include <ctime>
- generateMap.h
#include <iostream>
#include <opencv2/opencv.hpp>
有知道原因的大神,欢迎留言交流,感激不尽