2012-11-21 59 views
1

我声明如下C++载体 - acessing型结构的矢量大小的结构

#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: error: invalid use of ReadActivateLinkTrace::ListofHopsList

我是新来的载体。我如何访问/遍历结构中定义的结构向量?

回答

1

该声明是有效的,但它不符合你的想法。 ListofHopsList是一种类型(提示:typedef),而不是一个变量。你可能寻找

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

的问题是不与载体本身,但事实上你并没有声明一个成员,但定义一个新的类型。

另外,是否有任何理由使用指针矢量而不是矢量对象?

+0

感谢Luchian,这是有很大帮助:) – user1840954

+0

@user接受的答案,如果它回答您的问题 - 给它一个对勾。 – Yakk

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