c++ - C++ 语法头文件错误
问题描述
我正在将 opencv 和 gdal 与 Visual Studio 2019 社区版一起使用,我编写了一些示例测试以了解 opencv 和 gdal 在我的计算机上是否可以正常工作,但是随后出现了一些头文件错误,所有这些错误均不影响编译程序和程序的运行或输出,一切都很好,除了那些头文件语法错误,这让我很困惑。我的代码在下面:
/*opencv_test*/
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int main()
{
Mat image = Mat::zeros(300, 600, CV_8UC3);
circle(image, Point(250, 150), 100, Scalar(0, 255, 128), -100);
circle(image, Point(350, 150), 100, Scalar(255, 255, 255), -100);
imshow("Display Window", image);
waitKey(0);
return 0;
}
错误列表如下:
Warning C26451 Arithmetic overflow: Using operator '*' on a 4 byte value and then casting the result to a 8 byte value. Cast the value to the wider type before calling operator '*' to avoid overflow (io.2). opencv_test C:\MSVC_Library\OpenCV\opencv\build\include\opencv2\core C:\MSVC_Library\OpenCV\opencv\build\include\opencv2\core\mat.inl.hpp 550
Warning C6294 Ill-defined for-loop: initial condition does not satisfy test. Loop body not executed. opencv_test C:\MSVC_Library\OpenCV\opencv\build\include\opencv2\core C:\MSVC_Library\OpenCV\opencv\build\include\opencv2\core\matx.hpp 553
Warning C26812 The enum type 'cv::AccessFlag' is unscoped. Prefer 'enum class' over 'enum' (Enum.3). opencv_test C:\MSVC_Library\OpenCV\opencv\build\include\opencv2\core C:\MSVC_Library\OpenCV\opencv\build\include\opencv2\core\mat.hpp 66
我希望有人能真诚地回答我的问题。
解决方案
正如其他人指出的那样,这些是警告,而不是错误- 您的代码将编译并运行。您可以通过在“搜索”字段中键入例如“C26451”,从内置的 Visual Studio“帮助”(如果已安装)中获取有关这些警告含义的信息;或者,你可以谷歌相同。
对于C26812
警告,enum
在 Stack Overflow 上讨论了无范围类型的使用,这里;但是尝试通过修改OpenCV
标题来“解决”这个问题很可能会给您带来更多问题!我建议在这里可以安全地忽略所有三个警告,因为它们同样是关于建议良好的编码“风格”而不是指出可能的错误(假设编写OpenCV
包的人确实知道他们在做什么)。
但是,由于您很可能不想修改标头中的代码,因此您可以在包含它们之前暂时禁用警告,然后在所有相关语句OpenCV
之后恢复它们。#include
在您的情况下,对于您引用的警告,这应该有效:
#ifdef _MSC_VER // These #pragma lines are MSVC-specific!
#pragma warning(disable:26451) //
#pragma warning(disable:6294) // Disable specified warning numbers
#pragma warning(disable:26812) //
#endif // _MSC_VER
/*opencv_test*/
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc.hpp>
#ifdef _MSC_VER
#pragma warning(default:26451) //
#pragma warning(default:6294) // 'Default' will reset to your project's settings
#pragma warning(default:26812) //
#endif // _MSC_VER
#include <iostream>
//...
推荐阅读
- excel - 如何强制Excel单元格中每个单词的首字母大写
- c++ - c++17文件系统是否有任何方法来搜索与通配符匹配的文件名?
- asp.net - signalR 从服务器端的事件调用
- canvas - “selenium.InvalidArgumentException:无效参数:不支持的定位器策略”在 Selenium 中与页面上的画布工具交互时出错
- c# - 跟进在 C# 中下载该网站使用 cookie 的文件
- vim - vim中如何在命令模式和其他模式之间来回切换而不丢失键入的命令?
- python - 使用 Report Lab Python 库时出现属性错误
- python - Python 3:导入具有相同名称的不同 python 模块
- javascript - 我正在使用 vueJS 2.6.10,我的组件发出一个未定义的值
- python - 将纪元转换为没有 for 循环的工作日