Visual Studio 2019 中的 GDAL 库头文件错误和警告

Posted

技术标签:

【中文标题】Visual Studio 2019 中的 GDAL 库头文件错误和警告【英文标题】:GDAL Library Header Files Error and Warningsin With Visual Studio 2019 【发布时间】:2020-01-10 05:43:38 【问题描述】:

我在 Visual Studio 2019 社区版中使用 GDAL,我在下面的官方网站中使用了示例代码,程序编译、运行和输出正常,但我得到了错误和警告列表,我不知道我是否应该忽略它们或对头文件进行一些更改,以前有人遇到过这样的问题吗?希望有人能给我一些建议,谢谢。 示例代码:

/*gdal_test*/
#include <iostream>  
#include <gdal_priv.h>
#include <cpl_conv.h> 

using namespace std;

int main()

    const char* pszFile;
    GDALAllRegister();
    pszFile = "E:/190807/mosaic_data/S2_1_170215.tif";
    GDALDataset* poDataset = (GDALDataset*)GDALOpen(pszFile, GA_ReadOnly);
    GDALRasterBand* poBand = poDataset->GetRasterBand(1);
    int xsize = poBand->GetXSize();
    int ysize = poBand->GetYSize();
    cout << xsize << endl;
    cout << ysize << endl;

    system("pause");
    return 0;

错误列表主要包含这三个主要问题:

Error (active)  E0065   expected a ';'  gdaltest    C:\MSVC_Library\GDAL\warmerda\bld\include   C:\MSVC_Library\GDAL\warmerda\bld\include\ogr_geometry.h    387     

Error (active)  E1455   member function declared with 'override' does not override a base class member  gdaltest    C:\MSVC_Library\GDAL\warmerda\bld\include   C:\MSVC_Library\GDAL\warmerda\bld\include\ogr_geometry.h    1139        

Warning C26812  The enum type 'CPLErr' is unscoped. Prefer 'enum class' over 'enum' (Enum.3).   gdaltest    C:\MSVC_Library\GDAL\warmerda\bld\include   C:\MSVC_Library\GDAL\warmerda\bld\include\cpl_error.h   244     

我应该更改头文件中的语法吗?会改变它的影响吗?还是我应该忽略这些错误?

【问题讨论】:

【参考方案1】:

您声明您的程序“编译、运行和输出正常”,因此,您看到的错误是由 Visual Studio 中的“Intellisense”工具报告的。

要停止显示这些,请转到“错误列表”窗口并选择“仅构建”选项:

C26812 警告 消息可以禁用,如我的answer to your recent question 中所述。

【讨论】:

可以,但是……这个intelliSense在整个过程中做了什么? @ZhouXF 这是一个非常有趣的问题!如果您提到 Intellisense,许多人(在 SO 和其他地方)会对您做出奇怪的手势,并且可能会将您赶出教区!但它尝试在项目的所有源文件上“实时”查找和突出显示编码错误。然而,它经常失败,因为它不能(正确地)理解编译器选项、条件包含的代码块和许多其他更微妙的代码方面。 感谢您的回答,但我只是提出更多问题。首先,“实时”是什么意思,当我使用 Visual Studio IDE 时,它一直试图检查编码错误?其次,不管我打开与否这个intelliSense,错误仍然存​​在,为什么这些错误不会影响程序?因为据我所知,#include library.h 语句将 library 中的所有代码替换到我的 .cpp 文件中,所以intelliSense 发现 library.h 文件中存在错误并且它被写入了我的文件中然后编译器让它通过?这真的让我很困惑......@Adrian Mole @ZhouXF 头文件中可能会有被条件测试包围的“块”代码,例如#ifdef (some_symbol) #endif 实际 i> 编译器不使用(因为some_symbol 定义)。但是,IntelliSense 可能认为它定义,因此会在这些代码行中标记错误。这可能非常很烦人。 我大概明白了,非常感谢您的帮助,这解决了我脑海中的一个大问题。@Adrian Mole

以上是关于Visual Studio 2019 中的 GDAL 库头文件错误和警告的主要内容,如果未能解决你的问题,请参考以下文章

Visual Studio 2019 中的 Ngrok

什么会导致 Visual Studio 中的 LNK2019 错误?

如何摆脱 Visual Studio 2019 中的密码提示?

Unity3DUnity 脚本 ② ( Visual Studio 2019 中的 Unity 编译环境配置 | Unity 编辑器关联外部 C# 脚本编辑器 Visual Studio )

在 Visual Studio 2019 中的编译器指令之间切换?

在 Visual Studio 2019 中的编译器指令之间切换?