【问题标题】:Warning C4564 when building C++/CLI project that consumes strong-typed dataset构建使用强类型数据集的 C++/CLI 项目时出现警告 C4564
【发布时间】:2010-06-22 11:30:15
【问题描述】:

升级到 VC++ 2010 后,在构建使用 C# 项目中的强类型数据集的 C++/CLI 项目时会引发警告 C4564(方法定义了不受支持的默认参数)。

ReadersManager.cpp(311):警告 C4564:类“System::Data::DataTable”的方法“SetNewRecord”定义了不受支持的默认参数“action”

调用方法时明确指定值'2'

从程序集“System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089”导入类型“System::Data::DataTable”时发生此诊断。

从程序集“System.Data.DataSetExtensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089”导入类型“System::Data::TypedTableBase”时发生此诊断。

从程序集“MyProductDataStoreCLR, Version=4.5.0.9, Culture=neutral, PublicKeyToken=null”导入类型“MyProductDataStoreCLR::ReadersDataSet::ReadersDataTable”时发生此诊断。

在调用 System::Data::DataTable::Select 时会发出警告,因此我无法更改与 SetNewRecord 相关的调用代码。

这是 C++/CLI 不支持新的 C# 可选参数功能的问题吗?

【问题讨论】:

    标签: visual-c++ c++-cli warnings strongly-typed-dataset visual-c++-2010


    【解决方案1】:

    这是一个 4 级警告消息,属于“这可能会在某天让你在后端字节跳动”的类别。支持使用默认参数值调用方法而不指定值在 .NET 语言中参差不齐。 VB.NET 一直都有它,C# 只是在版本 4 中获得它。C++/CLI 不支持它,而且肯定永远不会支持。这是值得注意的,因为 C++ 语言确实 支持它。 C++/CLI 程序员可能会对此感到惊讶,因此会出现警告。

    对于警告,您无能为力,数据集的代码是自动生成的。否则它是完全良性的,如果您调用该方法而不为具有默认值的参数提供值,那么您将收到编译器错误。

    只需使用 #pragma warning(disable:4564) 或项目 > 属性 > C/C++ > 高级 > “禁用特定警告”设置关闭警告。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-19
      • 1970-01-01
      • 2014-03-24
      • 2018-01-13
      • 1970-01-01
      • 2014-10-19
      相关资源
      最近更新 更多