Question

Après mise à niveau vers VC ++ 2010, Avertissement C4564 est élevé (méthode définit le paramètre par défaut non pris en charge) lors de la construction d'un projet C ++ / CLI qui consume un ensemble de données fortement typé d'un projet C #.

  

ReadersManager.cpp (311): avertissement C4564: méthode 'SetNewRecord' de la classe 'System :: Data :: DataTable' définit le paramètre par défaut non pris en charge 'action'

     

Indiquez la valeur '2' explicitement lors de l'appel de la méthode

     

Ce diagnostic a eu lieu alors que le type d'importation 'System :: Data :: DataTable' de assembly 'System.Data, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = b77a5c561934e089.

     

Ce diagnostic a eu lieu alors que le type d'importation 'System :: Data :: TypedTableBase' de 'assemblage System.Data.DataSetExtensions, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = b77a5c561934e089.

     

Ce diagnostic a eu lieu alors que le type d'importation 'MyProductDataStoreCLR :: ReadersDataSet :: ReadersDataTable' de assembly 'MyProductDataStoreCLR, Version = 4.5.0.9, Culture = neutral, PublicKeyToken = null'.

L'avertissement est levé sur un appel à System::Data::DataTable::Select, donc il n'y a rien que je peux changer dans le code d'appel correspondant à SetNewRecord.

Est-ce un problème de C ++ / CLI ne supportant pas la nouvelle fonctionnalité de paramètres C # en option?

Était-ce utile?

La solution

Il est un niveau d'alerte 4 message, tombant dans la catégorie « cela peut vous octet dans le cul un jour ». Soutien à l'appel de méthodes avec les valeurs des paramètres par défaut sans spécifier la valeur est inégale dans les langages .NET. VB.NET toujours eu, C # vient d'acquérir dans la version 4. C ++ / CLI ne supporte pas et sûrement jamais. Ce qui est remarquable parce que le langage C de Finalité le soutenir. Un programmeur C ++ / CLI pourrait bien être surpris par cela, donc l'avertissement.

Il n'y a pas grand-chose que vous pouvez faire à l'avertissement, le code pour l'ensemble de données est généré automatiquement. Il est par ailleurs tout à fait anodin, si vous appelez la méthode sans fournir une valeur pour l'argument avec la valeur par défaut, vous obtiendrez une erreur de compilation.

Il suffit de tourner l'avertissement au large avec #pragma warning(disable:4564) ou Projet -> Propriétés -> C / C ++ -> Avancé -.> Désactiver Avertissements spécifiques

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top