Aracılığıyla paylaş


Derleyici Hatası C3293

'accessor': 'type' sınıfının varsayılan özelliğine (dizin oluşturucu) erişmek için 'default' kullanın

Açıklamalar

Dizine alınan bir özelliğe yanlış erişildi. Daha fazla bilgi için bkz . Nasıl yapılır: C++/CLI'da Özellikleri Kullanma.

Visual Studio 2017 ve üzeri: Visual Studio 2015 ve önceki sürümlerinde, derleyici bazı durumlarda varsayılan bir özelliği varsayılan dizin oluşturucu olarak yanlış tanımlamıştı. Özelliğe erişmek için "default" tanımlayıcısını kullanarak soruna geçici bir çözüm bulmak mümkündü. C++11'de varsayılan anahtar sözcük olarak kullanıma sunulduğunda geçici çözümün kendisi sorunlu hale geldi. Bu nedenle, Visual Studio 2017'de geçici çözümü gerektiren hatalar düzeltildi ve derleyici artık bir sınıfın varsayılan özelliğine erişmek için "varsayılan" kullanıldığında bir hataya neden oluyor.

Örnek

Aşağıdaki örnek, Visual Studio 2015 ve önceki sürümlerde C3293 oluşturur.

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