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 中的 LNK2019 错误?
如何摆脱 Visual Studio 2019 中的密码提示?
Unity3DUnity 脚本 ② ( Visual Studio 2019 中的 Unity 编译环境配置 | Unity 编辑器关联外部 C# 脚本编辑器 Visual Studio )