vs2012下编译别人的项目时,明明有头文件且xxx.cpp中包含的头文件,却还提示xxx是未标识符,error C2065

解决不同IDE文本编码导致的C++源码编译问题
本文详细记录了解决在不同IDE(如Visual Studio和Xcode)下使用相同源码文件时,由于文本编码不一致导致的编译错误问题。通过分析错误原因,作者最终发现是文本编码格式不统一导致的问题,并提供了解决步骤:将与问题相关的文件转换为ASCII编码,删除原文件,新建同名文件并复制内容,成功解决了编译问题。

一大早起来,从网上下载了一个cocos2d-x游戏--三消类游戏Sushi Crush源码,看到网上运行效果的截图,觉得这源码很有学习的必要。

于是,我就用vs2012打开win32下的sln,编译却提示“c:\users\end\desktop\sushicrush-master\classes\play-layer.cpp(22): error  C2065: “m_srcSushi”: 未声明的标识符”等等未标明的错误。我擦,明明在playlayer.cpp中都包含了

playlayer.h,而且player.h中的类PlayLayer都有变量m_srcSushi等等,这就很郁闷。上网找了资料,都没有解决这个问题。于是乎自己就开始分析错误原因了,如下。

vs2012提示未声明的标识符,就说明#include"player.h"的内容没有包含进来,可是player.h都在啊?这就奇怪了。后来发现,原作者是在xcode下写代码的,我想会不会是文本的格式问题导致VS2012无法识别player.h的内容。好,就假设是这个原因造成的,于是我就把player.h的内容复制到一个txt中,这是为了把格式去掉,然后把原player.h删除,再新建一个player.h,把txt的内容复制到新的player.h中。好的,如果再次编译时,没有提示m_srcSushi等未标明的错误,就证明上面的假设是成立的。我再次点击了编译,等待了几秒。果然这次没有提示m_srcSushi等未标明的错误,证明了以上错误是不同IDE的文本格式造成的。

可是这个问题解决了,又提示“xxx 是未标明的变量”,我用查找功能,在整个项目中都没有找到xxx变量。我擦,明明没有xxx变量,你还提示xxx是未标明,甚是郁闷。好的,再次分析原因,有了上面的解决方法,我首先想到又可能是文本的格式照成的,于是照样画葫芦,再次编译,问题解决了。整个项目可运行了。

此时,看看时间,发现这个问题搞两个半小时了,我擦。

最后做一个总结。如果一个项目在两个不同的IDE中编写代码时,提示xxx是未标识符,可是与xxx相关的头文件都在相关的cpp中,此错误可能是不同的IDE文本格式造成的。解决方法是,首先去除与xxx有关的文件的格式,使它变成ASCCI格式,复制内容到别处。然后删除原与xxx相关的文件。最后新建与删除同名的文件,把去除格式后的内容复制到各新文件中。


C:\Users\admin\Desktop\QT\untitled1\MainWindow.cpp:26: error: C2661: “op::PoseExtractorCaffe::PoseExtractorCaffe”: 没有重载函数接受 2 个参数 ..\..\MainWindow.cpp(26): error C2661: “op::PoseExtractorCaffe::PoseExtractorCaffe”: 没有重载函数接受 2 个参数 ..\..\MainWindow.cpp(26): note: 尝试匹配参数列表“(op::PoseModel, const char [30])” C:\Users\admin\Desktop\QT\untitled1\MainWindow.cpp:27: error: C2039: "setNetInputSize": 不是 "op::PoseExtractorCaffe" 的成员 ..\..\MainWindow.cpp(27): error C2039: "setNetInputSize": 不是 "op::PoseExtractorCaffe" 的成员 C:\openpose-prosperity\include\openpose/pose/poseExtractorCaffe.hpp(16): note: 参见“op::PoseExtractorCaffe”的声明 C:\Users\admin\Desktop\QT\untitled1\MainWindow.cpp:28: error: C2039: "setScaleMode": 不是 "op::PoseExtractorCaffe" 的成员 ..\..\MainWindow.cpp(28): error C2039: "setScaleMode": 不是 "op::PoseExtractorCaffe" 的成员 C:\openpose-prosperity\include\openpose/pose/poseExtractorCaffe.hpp(16): note: 参见“op::PoseExtractorCaffe”的声明 C:\Users\admin\Desktop\QT\untitled1\MainWindow.cpp:50: error: C2039: "videoFrameChanged": 不是 "QMediaCaptureSession" 的成员 ..\..\MainWindow.cpp(50): error C2039: "videoFrameChanged": 不是 "QMediaCaptureSession" 的成员 C:\Qt\6.10.0\msvc2022_64\include\QtMultimedia\qmediacapturesession.h(26): note: 参见“QMediaCaptureSession”的声明 C:\Users\admin\Desktop\QT\untitled1\MainWindow.cpp:50: error: C2065: “videoFrameChanged”: 声明的标识符 C:\Users\admin\Desktop\QT\untitled1\MainWindow.cpp:76: error: C2661: “QVideoFrame::bits”: 没有重载函数接受 0 个参数 ..\..\MainWindow.cpp(76): error C2661: “QVideoFrame::bits”: 没有重载函数接受 0 个参数 ..\..\MainWindow.cpp(76): note: 尝试匹配参数列表“()” C:\Users\admin\Desktop\QT\untitled1\MainWindow.cpp:96: error: C2665: “op::Array<float>::Array”: 没有重载函数可以转换所有参数类型 ..\..\MainWindow.cpp(96): error C2665: “op::Array<float>::Array”: 没有重载函数可以转换所有参数类型 C:\openpose-prosperity\include\openpose/core/array.hpp(89): note: 可能是“op::Array<float>::Array(const op::Array<float> &,const int,const bool)” ..\..\MainWindow.cpp(96): note: “op::Array<float>::Array(const op::Array<float> &,const int,const bool)”: 无法将参数 1 从“int”转换为“const op::Array<float> &” ..\..\MainWindow.cpp(96): note: 原因如下: 无法从“int”转换为“const op::Array<float>” ..\..\MainWindow.cpp(96): note: class“op::Array<float>”的构造函数声明为“explicit” C:\openpose-prosperity\include\openpose/core/array.hpp(96): note: 或 “op::Array<float>::Array(const op::Array<T2> &)” ..\..\MainWindow.cpp(96): note: “op::Array<float>::Array(const op::Array<T2> &)”: 应输入 1 个参数,却提供了 3 个 ..\..\MainWindow.cpp(96): note: 尝试匹配参数列表“(int, int, int)” C:\Users\admin\Desktop\QT\untitled1\MainWindow.cpp:97: error: C2039: "setFromMat": 不是 "op::Array<float>" 的成员 ..\..\MainWindow.cpp(97): error C2039: "setFromMat": 不是 "op::Array<float>" 的成员 C:\openpose-prosperity\include\openpose/core/array.hpp(21): note: 参见“op::Array<float>”的声明 C:\Users\admin\Desktop\QT\untitled1\MainWindow.cpp:100: error: C2039: "forward": 不是 "op::PoseExtractorCaffe" 的成员 ..\..\MainWindow.cpp(100): error C2039: "forward": 不是 "op::PoseExtractorCaffe" 的成员 C:\openpose-prosperity\include\openpose/pose/poseExtractorCaffe.hpp(16): note: 参见“op::PoseExtractorCaffe”的声明 C:\Users\admin\Desktop\QT\untitled1\MainWindow.cpp:101: error: C2039: "getKeypoints": 不是 "op::PoseExtractorCaffe" 的成员 ..\..\MainWindow.cpp(101): error C2039: "getKeypoints": 不是 "op::PoseExtractorCaffe" 的成员 C:\openpose-prosperity\include\openpose/pose/poseExtractorCaffe.hpp(16): note: 参见“op::PoseExtractorCaffe”的声明 C:\Users\admin\Desktop\QT\untitled1\MainWindow.cpp:101: error: C2530: “keypoints”: 必须初始化引用 C:\Users\admin\Desktop\QT\untitled1\MainWindow.cpp:104: error: C3536: “keypoints”: 初始化之前无法使用 ..\..\MainWindow.cpp(26): error C2661: “op::PoseExtractorCaffe::PoseExtractorCaffe”: 没有重载函数接受 2 个参数 ..\..\MainWindow.cpp(26): note: 尝试匹配参数列表“(op::PoseModel, const char [30])” ..\..\MainWindow.cpp(27): error C2039: "setNetInputSize": 不是 "op::PoseExtractorCaffe" 的成员 C:\openpose-prosperity\include\openpose/pose/poseExtractorCaffe.hpp(16): note: 参见“op::PoseExtractorCaffe”的声明 ..\..\MainWindow.cpp(28): error C2039: "setScaleMode": 不是 "op::PoseExtractorCaffe" 的成员 C:\openpose-prosperity\include\openpose/pose/poseExtractorCaffe.hpp(16): note: 参见“op::PoseExtractorCaffe”的声明 ..\..\MainWindow.cpp(50): error C2039: "videoFrameChanged": 不是 "QMediaCaptureSession" 的成员 C:\Qt\6.10.0\msvc2022_64\include\QtMultimedia\qmediacapturesession.h(26): note: 参见“QMediaCaptureSession”的声明 ..\..\MainWindow.cpp(50): error C2065: “videoFrameChanged”: 声明的标识符 ..\..\MainWindow.cpp(76): error C2661: “QVideoFrame::bits”: 没有重载函数接受 0 个参数 ..\..\MainWindow.cpp(76): note: 尝试匹配参数列表“()” ..\..\MainWindow.cpp(96): error C2665: “op::Array<float>::Array”: 没有重载函数可以转换所有参数类型 C:\openpose-prosperity\include\openpose/core/array.hpp(89): note: 可能是“op::Array<float>::Array(const op::Array<float> &,const int,const bool)” ..\..\MainWindow.cpp(96): note: “op::Array<float>::Array(const op::Array<float> &,const int,const bool)”: 无法将参数 1 从“int”转换为“const op::Array<float> &” ..\..\MainWindow.cpp(96): note: 原因如下: 无法从“int”转换为“const op::Array<float>” ..\..\MainWindow.cpp(96): note: class“op::Array<float>”的构造函数声明为“explicit” C:\openpose-prosperity\include\openpose/core/array.hpp(96): note: 或 “op::Array<float>::Array(const op::Array<T2> &)” ..\..\MainWindow.cpp(96): note: “op::Array<float>::Array(const op::Array<T2> &)”: 应输入 1 个参数,却提供了 3 个 ..\..\MainWindow.cpp(96): note: 尝试匹配参数列表“(int, int, int)” ..\..\MainWindow.cpp(97): error C2039: "setFromMat": 不是 "op::Array<float>" 的成员 C:\openpose-prosperity\include\openpose/core/array.hpp(21): note: 参见“op::Array<float>”的声明 ..\..\MainWindow.cpp(100): error C2039: "forward": 不是 "op::PoseExtractorCaffe" 的成员 C:\openpose-prosperity\include\openpose/pose/poseExtractorCaffe.hpp(16): note: 参见“op::PoseExtractorCaffe”的声明 ..\..\MainWindow.cpp(101): error C2039: "getKeypoints": 不是 "op::PoseExtractorCaffe" 的成员 C:\openpose-prosperity\include\openpose/pose/poseExtractorCaffe.hpp(16): note: 参见“op::PoseExtractorCaffe”的声明 ..\..\MainWindow.cpp(101): error C2530: “keypoints”: 必须初始化引用 ..\..\MainWindow.cpp(104): error C3536: “keypoints”: 初始化之前无法使用 jom: C:\Users\admin\Desktop\QT\untitled1\build\Desktop_Qt_6_10_0_MSVC2022_64bit-Debug\Makefile.Release [release\MainWindow.obj] Error 2 cl -c -nologo -Zc:wchar_t -FS -Zc:rvalueCast -Zc:inline -Zc:strictStrings -Zc:throwingNew -permissive- -Zc:__cplusplus -Zc:externConstexpr -O2 -MD -std:c++17 -utf-8 -W3 -w34100 -w34189 -w44456 -w44457 -w44458 -wd4577 -wd4467 -EHsc -DUNICODE -D_UNICODE -DWIN32 -D_ENABLE_EXTENDED_ALIGNED_STORAGE -DWIN64 -DOPENPOSE_MODEL_PATH="\"C:/openpose-prosperity/models\"" -DNDEBUG -DQT_QML_DEBUG -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_MULTIMEDIA_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -I..\..\..\untitled1 -I. -IC:\openpose-prosperity\include -IC:\opencv\build\include -I"C:\Program Files\Microsoft Visual Studio\18\Community\VC\Tools\MSVC\14.44.35207\include" -IC:\Qt\6.10.0\msvc2022_64\include -IC:\Qt\6.10.0\msvc2022_64\include\QtWidgets -IC:\Qt\6.10.0\msvc2022_64\include\QtMultimedia -IC:\Qt\6.10.0\msvc2022_64\include\QtGui -IC:\Qt\6.10.0\msvc2022_64\include\QtNetwork -IC:\Qt\6.10.0\msvc2022_64\include\QtCore -Irelease -I. -I/include -IC:\Qt\6.10.0\msvc2022_64\mkspecs\win32-msvc -Forelease\ @C:\Users\admin\AppData\Local\Temp\moc_MainWindow.obj.1428.1125.jom moc_MainWindow.cpp jom: C:\Users\admin\Desktop\QT\untitled1\build\Desktop_Qt_6_10_0_MSVC2022_64bit-Debug\Makefile [release] Error 2 23:58:28: The command "C:\Qt\Tools\QtCreator\bin\jom\jom.exe" terminated with exit code 2. 23:58:28: Error while building/deploying project untitled1 (kit: Desktop Qt 6.10.0 MSVC2022 64bit) 23:58:28: The kit Desktop Qt 6.10.0 MSVC2022 64bit has configuration issues which might be the root cause for this problem. 23:58:28: When executing step "Make" 23:58:28: Elapsed time: 00:07.
11-22
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值