我的声明如下
#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
我是向量的新手。我如何通过结构中定义的结构向量进行迭代/迭代?
答案 0 :(得分:1)
声明有效,但它不符合你的想法。 ListofHopsList
是一种类型(提示:typedef
),而不是变量。你可能正在寻找
struct ReadActivateLinkTrace
{
std::vector < ListofHops *> ListofHopsList;
bool operationState;
};
问题不在于矢量本身,而在于您没有声明成员,而是定义新类型。
另外,你是否有任何理由使用指针向量而不是对象向量?
答案 1 :(得分: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;
};