1

我的声明如下

#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在 struct中声明一个跳数列表向量ReadActivateLinkTrace

  1. 上述声明是否有效。
  2. 我得到以下错误编译

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

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

4

2 回答 2

1

声明是有效的,但它并没有按照你的想法做。ListofHopsList是一个类型(提示:)typedef,而不是一个变量。您可能正在寻找

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

问题不在于向量本身,而在于您没有声明一个成员,而是定义了一个新类型。

另外,你有什么理由使用指针向量而不是对象向量?

于 2012-11-21T06:21:28.573 回答
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;
};
于 2012-11-21T06:23:36.663 回答