Поделиться через


Ошибка компилятора C3293

"метод_доступа": используйте default для доступа к свойству по умолчанию (индексатору) для класса "тип"

Неправильный доступ к индексируемому свойству. Дополнительные сведения см. в статье "Практическое руководство. Использование свойств в C++/CLI ".

Visual Studio 2017 и более поздних версий: в Visual Studio 2015 и более ранних версиях компилятор в некоторых случаях неправильно задал свойство по умолчанию в качестве индексатора по умолчанию. Эту проблему удалось решить с использованием значения по умолчанию идентификатора для доступа к свойству. Возможное решение само по себе стало создавать проблемы после того, как значение по умолчанию было представлено как ключевое слово в C++ 11. Поэтому в Visual Studio 2017 были исправлены ошибки, требующие обходного решения. Теперь компилятор выдает ошибку, когда значение по умолчанию используется для доступа к свойству по умолчанию для класса.

Пример

Следующий пример создает C3293 в Visual Studio 2015 и более ранних версиях.

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