Udostępnij przez


Błąd kompilatora C3293

"accessor": użyj polecenia "default", aby uzyskać dostęp do właściwości domyślnej (indeksator) dla klasy "type"

Uwagi

Niepoprawnie uzyskiwano dostęp do właściwości indeksowanej. Aby uzyskać więcej informacji, zobacz Instrukcje: używanie właściwości w języku C++/cli .

Program Visual Studio 2017 lub nowszy: w programie Visual Studio 2015 i starszych kompilator w niektórych przypadkach błędnie zidentyfikował właściwość domyślną jako indeksator domyślny. Możliwe było obejście problemu przy użyciu identyfikatora "domyślnego" w celu uzyskania dostępu do właściwości. Samo obejście stało się problematyczne po wprowadzeniu domyślnego jako słowa kluczowego w języku C++11. W związku z tym w programie Visual Studio 2017 usterki, które wymagały obejścia, zostały naprawione, a kompilator zgłasza teraz błąd, gdy "default" jest używany do uzyskiwania dostępu do domyślnej właściwości klasy.

Przykład

Poniższy przykład generuje błąd C3293 w programie Visual Studio 2015 i wcześniejszych wersjach.

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