今天调试代码的时候,一直调试这个bug,bing查找,chatgpt也问了,提示是:
但按照提示修改了没用,还有另外一处错误
enum class EResultType
{
RESULT_UPDATE = 0x01,
RESULT_START_CHG = 0x02,
};
编译也提示:
1>h:\cn_ems\code\clousoft\app\fa\FaAPI.h(37): error C2143: 语法错误: 缺少“;”(在“enum [tag]”的前面)
chatgpt的解释如下:
还有其他文件,之前都没问题的,也出问题了。
分析,这些代码之前都没问题,只是修改了其他少数几个文件导致的,对比了下修改记录,发现就是一个头文件少了一个;
如下:
加上之后,编译就ok了。
为啥这个头文件少了一个;导致其他文件,struct,enum出现各种问题了呢?
在C++中,头文件通常会声明一些变量、函数、结构体、枚举等类型,其他源文件通过包含该头文件来使用这些声明。
如果某个头文件声明的接口函数少写了,那么在包含该头文件的源文件中,编译器无法找到该函数的声明,就会出现C2143语法错误,提示未找到该函数的声明。
此外,由于缺少函数声明,编译器可能会将该函数的调用解析为其他类型的语句,如变量声明或表达式,导致其他类型的语法错误。这些错误可能会在工程中的多个文件中出现,因为这些文件都使用了该头文件。
因此,编写C++程序时应该注意头文件的正确性和完整性,确保所有需要使用的类型、函数等都被正确地声明和定义
综上,大家编程的时候,规范很重要:
1:不要用大而全的全局头文件,将一大堆的接口都放在这里,一旦这个头文件异常,通常这个头文件不报错(至少不会直接到你少写的;处提示的),问题查找不方便。
2:最好用namespace 将多个不同类型的接口隔离开,这样问题查找也会便利。归类整理后的接口,查看和调用都比较清晰。