Condividi tramite


Errore del compilatore C3293

'accessor': usare 'default' per accedere alla proprietà predefinita (indexer) per la classe 'type'

L'accesso a una proprietà indicizzata non è stato eseguito correttamente. Per altre informazioni, vedere Procedura: Usare le proprietà in C++/CLI .

Visual Studio 2017 e versioni successive: in Visual Studio 2015 e versioni precedenti, il compilatore in alcuni casi identifica erroneamente una proprietà predefinita come indicizzatore predefinito. È stato possibile risolvere il problema usando l'identificatore "default" per accedere alla proprietà. Questa soluzione è diventata problematica dopo che il termine "default" è stato introdotto come parola chiave in C++11. Pertanto, in Visual Studio 2017 sono stati corretti i bug che richiedevano la soluzione e il compilatore genera ora un errore quando si usa "default" per accedere alla proprietà predefinita per una classe.

Esempio

L'esempio seguente genera l'errore C3293 in Visual Studio 2015 e versioni precedenti.

// 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);
}