首页 > 解决方案 > 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      

我希望有人能真诚地回答我的问题。

标签: c++visual-studioopencvsyntax-errorheader-files

解决方案


正如其他人指出的那样,这些是警告,而不是错误- 您的代码编译并运行。您可以通过在“搜索”字段中键入例如“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>
//...

推荐阅读