Pregunta

Después de la actualización de VC ++ 2010, Advertencia C4564 se eleva (método define el parámetro por defecto sin soporte) en la construcción de un proyecto de C ++ / CLI que consume un conjunto de datos tipos fuertes a partir de un proyecto de C #.

  

ReadersManager.cpp (311): Se advierte C4564: Método 'SetNewRecord' de la clase 'System :: datos :: DataTable' define parámetros por defecto no soportado 'acción'

     

Especifica el valor '2' de manera explícita al llamar al método

     

Se produjo Este diagnóstico, mientras que la importación de tipo 'System :: datos :: DataTable' del ensamblado 'System.Data, versión = 4.0.0.0, Culture = neutral, PublicKeyToken = b77a5c561934e089'.

     

Se produjo Este diagnóstico, mientras que la importación de tipo 'System :: datos :: TypedTableBase' del ensamblado 'System.Data.DataSetExtensions, versión = 4.0.0.0, Culture = neutral, PublicKeyToken = b77a5c561934e089'.

     

Se produjo Este diagnóstico, mientras que la importación de tipo 'MyProductDataStoreCLR :: ReadersDataSet :: ReadersDataTable' del ensamblado 'MyProductDataStoreCLR, versión = 4.5.0.9, Culture = neutral, PublicKeyToken = null'.

La advertencia se está levantando en una llamada a System::Data::DataTable::Select, por lo que no hay nada que pueda cambiar en el código de llamada correspondiente a SetNewRecord.

¿Es esto un problema de C ++ / CLI no apoyar el nuevo C # capacidad de parámetros opcionales?

¿Fue útil?

Solución

Es un mensaje de aviso de nivel 4 que entren en la categoría de "esto puede byte en el culo algún día". Soporte para llamar a los métodos con los valores de los parámetros por defecto, sin especificar el valor es irregular en los lenguajes .NET. VB.NET siempre lo tenía, C # simplemente lo adquirió en la versión 4. C ++ / CLI no apoyarlo y seguramente nunca lo hará. Que es notable porque el lenguaje C ++ hace lo soporta. Un programador de C ++ / CLI bien podría ser sorprendido por esto, por lo tanto la advertencia.

No hay mucho que puede hacer acerca de la advertencia, el código para el conjunto de datos se genera automáticamente. Es otra manera totalmente benigna, si se llama al método sin necesidad de suministrar un valor para el argumento con el valor por defecto entonces obtendrá un error de compilación.

Sólo da el aviso con #pragma warning(disable:4564) o Proyecto -> Propiedades -> C / C ++ -> Avanzado -.> Las advertencias específicas Desactivar

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top