visual-c++ - 构建使用强类型数据集的 C++/CLI 项目时警告 C4564

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

升级到 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/

相关文章:

c++ - 无法加载 x.dll 或其依赖项之一

c# - 从 C# 调试 C++ 静态库

c++ - System::对 C++ char* 参数的字符串引用

PHP - CodeIgniter - 为 foreach() 提供的参数无效

c++ - 为什么我在运行 Boost 代码时总是收到警告?

c - Visual C++ 2010/2008 在 C 模式下不接受 `__int64`

c++ - 为什么此代码生成错误 C2105 而不是 C3892?

java - JNA:函数及其参数映射究竟是如何从java到VC++的

visual-c++ - 将 .Net ref (%) 转换为原生 (&)

c - 关于 C 函数指针的警告