Моя декларация выглядит следующим образом
#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
,
vector.cpp: 23: ошибка: неверное использование
ReadActivateLinkTrace :: ListofHopsList
Я новичок в векторах. Как я могу получить доступ / перебрать вектор структур, определенных в структуре?
Декларация действительна, но она не делает то, что вы думаете. ListofHopsList
это тип (подсказка: typedef
), а не переменная. Вы, вероятно, ищете
struct ReadActivateLinkTrace
{
std::vector < ListofHops *> ListofHopsList;
bool operationState;
};
Проблема была не в самом векторе, а в том, что вы не объявляли член, а определяли новый тип.
Кроме того, есть ли причина, по которой вы используете вектор указателей, а не вектор объектов?
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;
};