Kompilatorfel C3293

"accessor": använd "default" för att komma åt standardegenskapen (indexeraren) för klassens "typ"

Anmärkningar

En indexerad egenskap användes felaktigt. Mer information finns i Använda egenskaper i C++/CLI .

Visual Studio 2017 och senare: I Visual Studio 2015 och tidigare felidentifierade kompilatorn i vissa fall en standardegenskap som standardindexerare. Det gick att kringgå problemet med hjälp av identifieraren "default" för att komma åt egenskapen. Själva lösningen blev problematisk efter att standardinställningen introducerades som ett nyckelord i C++11. I Visual Studio 2017 har därför buggarna som krävde lösningen åtgärdats, och kompilatorn genererar nu ett fel när "standard" används för att komma åt standardegenskapen för en klass.

Example

I följande exempel genereras C3293 i Visual Studio 2015 och tidigare.

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