尽管我在所有头文件中都包含了头文件保护,但当我创建头文件 PointXYZRGBAI.h 并将其包含在 LidarFile.cpp 和 core.cpp 中时,会生成错误
duplicate symbol _EIGEN_ALIGN_16 in:
CMakeFiles/core.dir/core.cpp.o
CMakeFiles/core.dir/LidarFile.cpp.o
ld: 1 duplicate symbol for architecture x86_64
Run Code Online (Sandbox Code Playgroud)
错误似乎抱怨的标题是
#define PCL_NO_PRECOMPILE
#ifndef POINTXYZRGBAI_H
#define POINTXYZRGBAI_H
#endif
#include <pcl/point_types.h>
struct PointXYZRGBAI{
PCL_ADD_POINT4D;
union{
struct{
float intensity;
uint32_t rgba;
};
float data_c[4];
};
EIGEN_MAKE_ALIGNED_OPERATOR_NEW
} EIGEN_ALIGN_16;
POINT_CLOUD_REGISTER_POINT_STRUCT(PointXYZRGBAI,
(float, x, x)
(float, y, y)
(float, z, z)
(float, intensity, intensity)
(uint32_t, rgba, rgba)
)
inline std::ostream& operator << (std::ostream& os, const PointXYZRGBAI& p){
os << "(" << p.x << ", " …Run Code Online (Sandbox Code Playgroud) 我在我的代码中声明了一个特定的键盘回调函数:
void keyboardEventCallback(const pcl::visualization::KeyboardEvent &event, void* viewer_void, void* widget_void);
Run Code Online (Sandbox Code Playgroud)
键盘事件是传递给回调函数的实际事件,viewer_void参数是指向PCLVisualizer类的指针,该类生成用于呈现的窗口,而widget_void是指向与Qt接口的窗口小部件的指针.
在pcl的文档中,注册函数传递用于注册键盘函数的参数
boost::signals2::connection registerKeyboardCallback(void(T::*callback)(const pcl::visualization::KeyboardEvent&, void*), T& instance, void* cookie=nullptr)
Run Code Online (Sandbox Code Playgroud)
所以我的问题是,注册函数声明中的含义T::*是什么,为什么我不允许传递这个:
m_vis->registerKeyboardCallback(keyboardEventCallback, (void*)&m_vis, (void*)this);
Run Code Online (Sandbox Code Playgroud)
m_vis可视化器在哪里,keyboardcallback是回调,这是小部件.
为什么我不能这样注册.这是针对点云库的.