环境:Win10, x64, VS2017, NX
记录日期:2020/09/10
错误描述:
NX二次开发时,新建了一个头文件 a.hpp,部分代码如下:
#include <uf_defs.h>
#include <uf_ui_types.h>
#include <iostream>
enum class DllExport FORM_TYPE
{
UNIFIED = 0,
METRIC, //出错语句
TRAPEZOIDAL
};
编译是成功的,然后在另外一个代码文件中 b.cpp 中使用 a.hpp,代码如下:
#include <uf.h>
#include "ToolData.hpp"
#include <memory>
#include <array>
编译报错,提示 METRIC 是常数 !!!
错误原因:
在b.cpp中, uf.h 文件在ToolData.hpp前面,打开uf.h 发现 uf.h 已经有 #define METRIC 1
但由于a.hpp 中 没有uf.h, 所以定义METRIC不会冲突,a.hpp 文件单独编译肯定是正确的,
但当其他文件使用 a.hpp 时,如果 uf.h 在 a.hpp 前面,编译就会报错。
解决办法:
1. 养成一个好的习惯,将系统文件放在最前面,这样重复的变量在编译前就会暴露出来,
然后使用 undef METRIC 解决冲突,毕竟这种错误很难定位,尽量规范。
2. 自己编写代码定义变量时,尽量避免系统关键字 ,如MessageBox, 使用不会重复的名字,
这种方法比较笨,不建议使用。