【问题标题】:GDAL Library Header Files Error and Warningsin With Visual Studio 2019Visual Studio 2019 中的 GDAL 库头文件错误和警告
【发布时间】: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     

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

【问题讨论】:

    标签: c++ visual-studio header-files gdal


    【解决方案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
    猜你喜欢
    • 2017-08-12
    • 2020-11-22
    • 1970-01-01
    • 1970-01-01
    • 2010-09-10
    • 1970-01-01
    • 2021-10-05
    • 2022-10-14
    • 2020-02-26
    相关资源
    最近更新 更多