Bootstrap

C++ error C2059: 语法错误:“常数”

环境: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, 使用不会重复的名字,

这种方法比较笨,不建议使用。

 

;