2013-07-04 2 views
2

У меня есть простой класс массив обертки, который выглядит следующим образом:Оценивая оператор подстрочного в окне просмотра

class MyArray 
{ 
    int * m_Data; 
    int m_Size; 

public: 
    MyArray(int aSize) : m_Size(aSize), m_Data(new int[aSize]) 
    { 
    } 

    int & operator [](int aIndex) 
    { 
     return m_Data[aIndex]; 
    } 

    const int & operator [](int aIndex) const 
    { 
     return m_Data[aIndex]; 
    } 
}; 

MyArray a(10); 

Всякий раз, когда я пытаюсь оценить оператор индексирования в отладчике (быстрые часы, немедленным окно и т.д.) : например a[0], я получаю a[0] no operator "[]" matches these operands ошибка. Я знаю, что могу перебирать поля классов, чтобы добраться до содержимого массива. Но гораздо проще просто скопировать часть строки кода и оценить ее в окне часов. Я попытался удалить константные и не константные [] операторы. Я также попытался использовать() оператор, он тоже не работал, но он дал другое сообщение об ошибке. Я пробовал это в VS2012 и VS2013 Preview: то же самое. Есть ли способ исправить это?

Если я заменить оператор подстрочного с функцией члена:

int & Item(int aIndex) 
{ 
    return m_Data[aIndex]; 
} 

Тогда смотреть окно может показать мне результат. Но я бы предпочел использовать индексный оператор.

ответ

1

Я нашел решение, которое не очень удобно, но, похоже, работает. Если я использую расширенную форму вызова оператора, то он работает в VC++ 2012:

a.operator[](0) 

Это мне не ясно, почему эти две формы отличаются от VC++ отладчик. Поэтому я разместил новый вопрос here

Смежные вопросы