Что мне нужно ввести в autoexp.dat, чтобы можно было проверить член данных класса, содержащегося в векторе? - PullRequest
0 голосов
/ 05 февраля 2012

Во-первых, извинение: я читал несколько предыдущих тем о проверке шаблонов в VS (например, this ); к сожалению, они либо не содержали нужную мне информацию, либо (что более вероятно) я не смог извлечь информацию из ответов. Надеюсь, я не спрашиваю о чем-то слишком очевидном, о чем уже много раз спрашивали.

У меня есть вектор, содержащий объекты класса SomeClass:

class SomeClass {
    int a, b;
    //constructor..
};

std::vector<SomeClass> vec;

//vec.push some elements..

Теперь я хочу иметь возможность наблюдать за vec [0] .a, vec [1] .a, .... в отладчике VS2010. Когда я наивно пробую это, я, конечно, получаю:

vec[0].a    CXX0058: Error: overloaded operator not found

И когда я пробую одно из решений, предложенных в ответах на вопрос, с которым я связан выше, я получаю:

((vec)._Myfirst)[0].a   CXX0025: Error: operator needs class/struct/union

Итак, я понимаю, что мне нужно изменить autoexp.dat. Я пытался сделать это какое-то время безуспешно.

Я был бы очень признателен, если бы кто-то мог написать, какую строку / строки мне нужно добавить в autoexp.dat, чтобы иметь возможность проверять эти переменные (я уже чувствую, что потратил слишком много времени на это - и поэтому я был бы очень признателен, если бы мог получить явное решение, а не подсказки или ссылки).

Спасибо за ваше время.

1 Ответ

1 голос
/ 05 февраля 2012

Пусть SomeClass будет определено так:

class SomeClass
{
public:
    SomeClass(int a, int b) : a(a), b(b) { }
    int a, b;
};

Вы говорите, что у вас есть "массив векторов" , но у вас есть только вектор объектов типа SomeClass:

std::vector<SomeClass> vec;
SomeClass a(1,2);
vec.push_back(a);
std::cout << vec[0].a;

В этом случае вы можете обращаться к ним напрямую, используя оператор индекса массива ( [] ).Если вы уверены, что есть объект с индексом 0, то vec[0].a вполне подойдет.

Если вам нужен массив векторов, он будет выглядеть так:

std::vector<SomeClass> vec[10];
SomeClass a(1,2);
vec[3].push_back(a);
std::cout << vec[3][0].a;

Вы объявляетеvec в виде массива из 10 векторов, а затем вы добавляете элемент a в конце 4. вектора (по индексу 3).По vec[3][0].a вы получаете доступ к атрибуту элемента по индексу 0 вектора по индексу 3.

Вывод обоих этих примеров: 1

А для отладки:
Во втором примере, когда я переключаю точку останова на строке vec[3].push_back(a);, затем я выбираю Debug конфигурацию, затем я нажимаю F5, и когда она останавливается на моей точке останова:

  1. Нажмите Ctrl + D, Q
  2. Запись vec[7] в поле выражения
  3. Выберите Добавить часы
  4. Посмотрите, как прекрасный Visual Studio показывает вам вектор с индексом 7 в окне Watch 1

Надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...