Векторы C ++ — изменение размера вектора типа struct, объявленного в структуре

Моя декларация выглядит следующим образом

#include <vector>
#include <iostream>
using namespace std;

typedef struct _ListofHops_T
{
int macAddrLtr;
int ttlValue;
}ListofHops;struct ReadActivateLinkTrace
{
typedef std::vector < ListofHops *> ListofHopsList;
bool operationState;
};int main()
{
ReadActivateLinkTrace readLinkTrace;

for (size_t listItr=0; listItr < readLinkTrace.ListofHopsList.size(); listItr++)
{
.....
}
}

Я пытаюсь объявить вектор списка прыжков struct в структуре ReadActivateLinkTrace,

  1. Является ли вышеуказанная декларация действительной.
  2. Я получаю следующую ошибку компиляции

vector.cpp: 23: ошибка: неверное использование
ReadActivateLinkTrace :: ListofHopsList

Я новичок в векторах. Как я могу получить доступ / перебрать вектор структур, определенных в структуре?

1

Решение

Декларация действительна, но она не делает то, что вы думаете. ListofHopsList это тип (подсказка: typedef), а не переменная. Вы, вероятно, ищете

struct ReadActivateLinkTrace
{
std::vector < ListofHops *> ListofHopsList;
bool operationState;
};

Проблема была не в самом векторе, а в том, что вы не объявляли член, а определяли новый тип.

Кроме того, есть ли причина, по которой вы используете вектор указателей, а не вектор объектов?

1

Другие решения

ReadActivateLinkTrace :: ListofHopsList является typedef, который только объявляет псевдоним для имени типа. Он не определяет фактический объект этого типа. Вы, очевидно, хотите:

struct ReadActivateLinkTrace
{
std::vector < ListofHops *> ListofHopsList;
bool operationState;
};

Вам следует наверное есть некоторые мысли о том, что это вектор указателей, хотя. По крайней мере, не случайно, кажется, что указатель — лучший выбор здесь. Пока вы на это, это:

typedef struct _ListofHops_T
{
int macAddrLtr;
int ttlValue;
}ListofHops;

Это довольно ужасно в двух отношениях. Сначала typedef здесь нужно только в коде C, а не C ++. Во-вторых, имя _ListofHops_T зарезервировано для реализации, поэтому его использование дает неопределенное поведение. Это должно быть просто:

struct ListofHops {
int macAddrLtr;
int ttlValue;
};
1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector