繁体   English   中英

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

[英]C++ vectors - acessing the size of vector of type struct declared within a 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++)
    {
      .....
    }
}

我试图在结构ReadActivateLinkTrace声明一个跃点struct列表的向量。

  1. 以上声明是否有效。
  2. 编译时出现以下错误

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

我是 vector 的新手。 我如何访问/迭代结构中定义的结构向量?

该声明是有效的,但它并没有按照您的想法行事。 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;
};

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM