algorithm(12): error C2143: 语法错误 : 缺少“;”(在“namespace”的前面)

本文记录了一位经验丰富的C++程序员如何通过编译错误提示,定位并解决因缺少分号导致的语法错误。错误出现在多个文件中,包括标准库和第三方库,最终在公共头文件中找到问题源头,修复了缺失的分号,使得项目编译正常。文章强调了代码重构时的注意事项和错误排查技巧。
摘要由CSDN通过智能技术生成

对于一个熟手的C++码农来说,看到这样的一个问题,一下子就能反应是哪个地方代码少了一个";"。有可能是“Ctrl+C"或自己写".h"文件的某个单独函数或类是引起的。如果有svn或写的代码不复杂,定位问题相对容易,如果项目复杂,尤其是带新人,由新人引入时,能很快的定位错误,这就有点考验基本功了。首先,问题肯定不是出在algorithm.h文件,并且这个文件是std的一部分有写保护了的。

我先把编译出错的提示贴出来,再一步细数如何去定位这种问题:

1>  HKCtrl.cpp
1>..\..\..\PublicCode\extern_include\HKCamera\HCNetSDK.h(41022): warning C4010: 单行注释包含行继续符
1>..\..\..\PublicCode\extern_include\HKCamera\Sadp.h(64): warning C4005: “MAX_FILE_PATH_LEN”: 宏重定义
1>          ..\..\..\PublicCode\extern_include\HKCamera\HCNetSDK.h(33208) : 参见“MAX_FILE_PATH_LEN”的前一个定义
1>..\..\..\PublicCode\ExternCode\loader\IniReader.h(6): error C2144: 语法错误:“char”的前面应有“;”
1>  HKLocal.cpp
1>C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\excpt.h(29): error C2144: 语法错误:“int”的前面应有“;”
1>  PersonDetect.cpp
1>C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\algorithm(12): error C2143: 语法错误 : 缺少“;”(在“namespace”的前面)
1>  WidgetFaceDetect.cpp
1>.\WidgetChildBase.h(19): error C2144: 语法错误:“Ctrl5DClient”的前面应有“;”
1>..\..\..\PublicCode\extern_include\HKCamera\HCNetSDK.h(41022): warning C4010: 单行注释包含行继续符
1>..\..\..\PublicCode\extern_include\HKCamera\Sadp.h(64): warning C4005: “MAX_FILE_PATH_LEN”: 宏重定义
1>          ..\..\..\PublicCode\extern_include\HKCamera\HCNetSDK.h(33208) : 参见“MAX_FILE_PATH_LEN”的前一个定义
1>  moc_WidgetFaceDetect.cpp
1>C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\algorithm(12): error C2143: 语法错误 : 缺少“;”(在“namespace”的前面)
1>  capturepic.cpp
1>d:\qt\4.8.3\include\qtgui\../../src/gui/itemviews/qtreeview.h(51): error C2144: 语法错误:“int”的前面应有“;”
1>d:\qt\4.8.3\include\qtgui\../../src/gui/itemviews/qtreeview.h(51): error C2146: 语法错误: 缺少“;”(在标识符“QtGuiModule”的前面)
1>d:\qt\4.8.3\include\qtgui\../../src/gui/itemviews/qtreeview.h(51): error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
1>d:\qt\4.8.3\include\qtgui\../../src/gui/itemviews/qtreeview.h(51): error C2371: “QtValidLicenseForGuiModule”: 重定义;不同的基类型
1>          d:\qt\4.8.3\include\qtcore\../../src/corelib/global/qglobal.h(2719) : 参见“QtValidLicenseForGuiModule”的声明
1>..\..\..\PublicCode\extern_include\HKCamera\HCNetSDK.h(33208): warning C4005: “MAX_FILE_PATH_LEN”: 宏重定义
1>          ..\..\..\PublicCode\extern_include\HKCamera\Sadp.h(64) : 参见“MAX_FILE_PATH_LEN”的前一个定义
1>..\..\..\PublicCode\extern_include\HKCamera\HCNetSDK.h(41022): warning C4010: 单行注释包含行继续符
1>  正在生成代码...

为了版面整清,可以在属性中把特定的warning屏蔽掉

 然后得到:

1>------ 已启动生成: 项目: CapturePic, 配置: Debug Win32 ------
1>  IniReader.cpp
1>  md5.cpp
1>  DataProcess.cpp
1>  misc.cpp
1>  tea.cpp
1>  TeaLocal.cpp
1>  Config.cpp
1>  LoadFile.cpp
1>  MGameLog.cpp
1>  UsefulfunsEditor.cpp
1>  UsefulFuns.cpp
1>  XmlParser.cpp
1>  HKCtrl.cpp
1>F:\SixAxisTheatra\Theatre_b2\PublicCode\ExternCode\loader\IniReader.h(6): error C2144: 语法错误:“char”的前面应有“;”
1>  HKLocal.cpp
1>C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\excpt.h(29): error C2144: 语法错误:“int”的前面应有“;”
1>  PersonDetect.cpp
1>C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\algorithm(12): error C2143: 语法错误 : 缺少“;”(在“namespace”的前面)
1>  WidgetFaceDetect.cpp
1>F:\SixAxisTheatra\Theatre_b2\SixAxisTheatra_JiYing\ControlClient\CapturePic\WidgetChildBase.h(19): error C2144: 语法错误:“Ctrl5DClient”的前面应有“;”
1>  WidgetHKCam.cpp
1>  WidgetChildBase.cpp
1>  capturepic.cpp
1>d:\qt\4.8.3\include\qtgui\../../src/gui/itemviews/qtreeview.h(51): error C2144: 语法错误:“int”的前面应有“;”
1>d:\qt\4.8.3\include\qtgui\../../src/gui/itemviews/qtreeview.h(51): error C2146: 语法错误: 缺少“;”(在标识符“QtGuiModule”的前面)
1>d:\qt\4.8.3\include\qtgui\../../src/gui/itemviews/qtreeview.h(51): error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
1>d:\qt\4.8.3\include\qtgui\../../src/gui/itemviews/qtreeview.h(51): error C2371: “QtValidLicenseForGuiModule”: 重定义;不同的基类型
1>          d:\qt\4.8.3\include\qtcore\../../src/corelib/global/qglobal.h(2719) : 参见“QtValidLicenseForGuiModule”的声明
1>  moc_capturepic.cpp
1>  正在生成代码...
1>  正在编译...
1>  moc_WidgetChildBase.cpp
1>  moc_WidgetFaceDetect.cpp
1>C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\algorithm(12): error C2143: 语法错误 : 缺少“;”(在“namespace”的前面)
1>  moc_WidgetHKCam.cpp
1>  main.cpp
1>  正在生成代码...
========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========

 我们看到的文件中有很多都是std或qt里面的,跟自身代码相关的,就只有2个地方,首先定位到IniRead.h文件,显然没有可用的有效信息

 然后再看第2处地方,可以看到事先声明类有红色的提示

 但事实上,本工程中并没有用到此类的实现,问题陷入的困境,当时,我人也是非常疑惑,后来仔细问了一下同事(新人)也没有进行大量修改代码,怎么会这样子呢?我盯着错误看了一阵,忽然想到,提示是不是表明错误是在比较独立的头文件中出现的?我又看了一下工程中的文件列表,首先找公共性质的头文件

 一下子找到了问题所在,加上了分号之后编译正常了:

 总结:

这个函数原来的位置并不是在HKLocal文件夹中的,而是作为一个类的成员函数的,我当时引导同事做重构时,让抽取出来,结果同事是直接拷贝了函数实现,来作修改,结果出现了这个杯具

void WidgetFaceDetect::FaceObjToStr(const std::string& fileName, const FaceList& faceList, std::string& txt)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值