3

升级到 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# 可选参数功能的问题吗?

4

1 回答 1

11

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

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

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

于 2010-06-22T14:55:09.467 回答