Partager via


Erreur du compilateur C3293

'accessor' : utilisez 'default' pour accéder à la propriété par défaut (indexeur) de la classe 'type'

L’accès à une propriété indexée est incorrect. Pour plus d’informations, voir Comment : utiliser des propriétés en C++/CLI .

Visual Studio 2017 et versions ultérieures : dans Visual Studio 2015 et versions antérieures, le compilateur a dans certains cas mal identifié une propriété par défaut comme indexeur par défaut. Il était possible de contourner le problème en utilisant l’identificateur « default » pour accéder à la propriété. La solution de contournement elle-même est devenue problématique dès que default a été introduit comme mot clé dans C++11. Ainsi, dans Visual Studio 2017, les bogues qui nécessitaient la solution de contournement ont été corrigés, et le compilateur génère maintenant une erreur quand l’utilisateur recourt à « default » pour accéder à la propriété par défaut d’une classe.

Exemple

L’exemple suivant génère l’erreur C3293 dans Visual Studio 2015 et versions antérieures.

// C3293.cpp
// compile with: /clr /c
using namespace System;
ref class IndexerClass {
public:
   // default indexer
   property int default[int] {
      int get(int index) { return 0; }
      void set(int index, int value) {}
   }
};

int main() {
   IndexerClass ^ ic = gcnew IndexerClass;
   ic->Item[0] = 21;   // C3293 in VS2015 OK in VS2017
   ic->default[0] = 21;   // OK in VS2015 and earlier

   String ^s = "Hello";
   wchar_t wc = s->Chars[0];   // C3293 in VS2015 OK in VS2017
   wchar_t wc2 = s->default[0];   // OK in VS2015 and earlier
   Console::WriteLine(wc2);
}