2012-08-06 85 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.