关于在MFC使用PCL过程中的魔幻BUG

max、min宏定义、函数冲突

错误:
error C2589: “(”:“::”右边的非法标记
error C2059: 语法错误:“::”
error C2143: 语法错误 : 缺少“(”(在“::”的前面)
error C2059: 语法错误:“)”
关于在MFC使用PCL过程中的魔幻BUG_第1张图片原因:
因为Windef.h中定义了

#ifndef max
#define max(a,b) (((a) > (b)) ? (a) : (b))
#endif

vc的max宏和std::numeric_limits<>max()函数冲突
解决方法:
把报错的所有std::numeric_limits<>max()用括号括起来避免和windows定义的宏混淆,例如(std::numeric_limits::max)() 或 (std::max)();
或者在前面加上

#undef min
#ubdef max

折磨我半个月,这要是不一个个翻库代码,谁能发现啊!

pcl_visualizer.hpp中无效的整数常量表达式

错误
error C1017: 无效的整数常量表达式
原因
VTK_RENDERING_BACKEND_OPENGL_VERSION没有定义到常数,可能是因为vtk的头文件函数缺少或者依赖问题

#if VTK_RENDERING_BACKEND_OPENGL_VERSION < 2
  actor->GetMapper ()->ImmediateModeRenderingOn ();
#endif

目测这个是用来检测OPENGL版本的,版本过低的话函数可能不匹配需要预处理
解决方法
我解决的是直接的找到VTK_RENDERING_BACKEND_OPENGL_VERSION的源代码位置,然后给他一个常量值,只要不影响项目运行就好。
这个问题也很魔幻,不知道是不是环境没配好,同一台机器这个项目没问题,另外一个项目又有问题。。。

编译出错,出现无法解析的外部符号

错误
error LNK2019: 无法解析的外部符号 “void __cdeclvtkRenderingOpenGL_AutoInit_Construct(void)”(?vtkRenderingOpenGL_AutoInit_Construct@@YAXXZ),该符号在函数 “public: __thiscallvtkRenderingOpenGL_ModuleInit::vtkRenderingOpenGL_ModuleInit(void)”(??0vtkRenderingOpenGL_ModuleInit@@QAE@XZ) 中被引用
error LNK2019: 无法解析的外部符号 “void __cdeclvtkRenderingOpenGL_AutoInit_Destruct(void)”(?vtkRenderingOpenGL_AutoInit_Destruct@@YAXXZ),该符号在函数 “public: __thiscall vtkRenderingOpenGL_ModuleInit::~vtkRenderingOpenGL_ModuleInit(void)”(??1vtkRenderingOpenGL_ModuleInit@@QAE@XZ) 中被引用
类似的很多,原本有四十多个,后来只剩和VTK相关的三个
原因
另外40多个是依赖的原因,vtk应该是头文件和版本的原因(猜的)
解决方法
我把lib和dll文件依赖重新设置一遍后基本上就剩下vtk引用出错了。
首先添加头文件引用

#include 

然后在下面代码后面加个2:

VTK_MODULE_INIT(vtkRenderingOpenGL);//修改前
VTK_MODULE_INIT(vtkRenderingOpenGL2);//修改后

然后我就没问题了。
还是出错可以加上:

VTK_MODULE_INIT(vtkInteractionStyle) ;  
VTK_MODULE_INIT(vtkRenderingFreeType);  

我也不知道干啥用的…

过期事件函数

错误大概是这样
error LNK2019: 无法解析的外部符号 “afx_msg void OnBnClickedOk();”(?afx_msg void OnBnClickedOk();@@YAXXZ),该符号在函数 “afx_msg void OnBnClickedOk();”(??0vtkRenderingOpenGL_ModuleInit@@QAE@XZ) 中被引用
原因
MFC对话框中按组件被修改了(改了ID或者删除,等)
解决
看清楚是哪个事件函数,分析一下有没有用,有用就留下,没用删掉就行。

你可能感兴趣的:(c++,3d,mfc)