C ++向量 - 访问struct中声明的struct类型的向量的大小

时间:2012-11-21 06:17:51

标签: c++ vector

我的声明如下

#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. 我收到以下错误编译
  3.   

    vector.cpp:23:错误:无效使用   ReadActivateLinkTrace :: ListofHopsList

    我是向量的新手。我如何通过结构中定义的结构向量进行迭代/迭代?

2 个答案:

答案 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;
};