2012-08-06 50 views
0

我有一個向量包含幾個類的指針。這些類被定義爲這樣:訪問指向類的向量中的元素?

class trackerSocket{ 
public: 
    ~trackerSocket(); 

    int trackerInitialize(string address); 
    int trackerSend(string getParams); 
    int trackerRecv(); 

    be_node *responseDict; 
    bool working; 
    unsigned int interval; 
    string trackerid; 
    unsigned int complete; 
    unsigned int incomplete; 
    be_dict *peersDict; 
    string peersBinary; 
    bool dictionary; 

private: 
    string address; 
    string port; 
    string protocol; 
    string page; 
    SOCKET ConnectSocket; 

    int parseAnnounce(string announce); 
    int parseTrackerResponse(string response); 
}; 

該載體通過此線宣稱:

vector<trackerSocket*> trackers; 

和類是使用這條線添加到向量:

trackerSocket *temptracker = new trackerSocket(); 
//Initialize values in temptracker structure here (omitted) 
trackers.push_back(temptracker); 
//Reset temptracker 
temptracker = new trackerSocket(); 
//Initialize values in temptracker structure here (omitted) 
trackers.push_back(temptracker); 
//Repeat 

如何能我訪問vector中每個類的工作變量?即使我知道某些類已將它設置爲true,下面的代碼也不會完成打印工作。

for(i = 0; i < trackers.size(); i++){ 
    if(trackers[i]->working){ 
     printf("Working.\n"); 
    } 
} 

感謝您的幫助:)

+0

這在技術上很好 - 你必須在其他地方有一些問題。 – 2012-08-06 11:55:29

+2

對於所有元素,「工作」實際上是「假」,或者「printf」不執行任何打印或「追蹤器」爲空。 – 2012-08-06 11:55:42

+0

嗯。通過在visual studio中監視功能,我可以使用下面的代碼訪問向量工作值中的第一個類:(*((trackers)._ Myfirst [0x00000000]))。正在工作,第二個使用此代碼: (*((trackers)._ Myfirst [0x00000001]))。工作,這是否有助於你們回答這個問題? – brnby 2012-08-06 12:07:02

回答

0

嘗試切換線路你在哪裏分配內存以及您正在使用的push_back(行)。插入可能會使std :: vector中的指針無效。

Pointers to elements of std::vector and std::list

+3

插入並沒有改變價值觀,它只能無效迭代器和引用元素它。 – 2012-08-06 11:53:35

0

如果想到問題可能出範圍,其中的類的實例的初始化perofrmed。因爲我知道實例,因此它們的成員在名稱空間,靜態和全局作用域中都被零值初始化,所以如果你在這個作用域之一上創建了對象的實例,這可能導致該工作的初始值爲默認值「0」,並且我不奇怪爲什麼

for(i = 0; i < trackers.size(); i++){ 
    if(trackers[i]->working){ 
     printf("Working.\n"); 
    } 
} 
not working as you expect. If so I offer you to use default constructor.