2012-11-21 72 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; 
};