升级到 VC++ 2010 后,在构建使用来自 C# 项目的强类型数据集的 C++/CLI 项目时,会引发警告 C4564(方法定义了不受支持的默认参数)。
ReadersManager.cpp(311): warning C4564: method 'SetNewRecord' of class 'System::Data::DataTable' defines unsupported default parameter 'action'
Specify value '2' explicitly when calling the method
This diagnostic occurred while importing type 'System::Data::DataTable ' from assembly 'System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.
This diagnostic occurred while importing type 'System::Data::TypedTableBase ' from assembly 'System.Data.DataSetExtensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.
This diagnostic occurred while importing type 'MyProductDataStoreCLR::ReadersDataSet::ReadersDataTable ' from assembly 'MyProductDataStoreCLR, Version=4.5.0.9, Culture=neutral, PublicKeyToken=null'.
警告是在调用
System::Data::DataTable::Select
时引发的,因此我无法在与 SetNewRecord
相关的调用代码中进行任何更改。这是 C++/CLI 不支持新的 C# 可选参数功能的问题吗?
最佳答案
这是一条警告级别为 4 的消息,属于“某天这可能会让您在后端感到厌烦”的类别。支持使用默认参数值调用方法而不指定值在 .NET 语言中是参差不齐的。 VB.NET 一直都有,C# 刚刚在第 4 版中获得它。C++/CLI 不支持它,而且肯定永远不会。这是值得注意的,因为 C++ 语言确实支持它。 C++/CLI 程序员很可能对此感到惊讶,因此是警告。
您对警告无能为力,数据集的代码是自动生成的。否则,这是完全良性的,如果您调用该方法而不为具有默认值的参数提供值,那么您将收到编译器错误。
只需使用 #pragma warning(disable:4564)
或 Project > Properties > C/C++ > Advanced > "Disable Specific Warnings"设置关闭警告。
关于visual-c++ - 构建使用强类型数据集的 C++/CLI 项目时警告 C4564,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3092629/