Ошибка компилятора 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);
}