访问指向类的指针向量中的元素?

时间:2012-08-06 11:46:57

标签: c++ class vector

我有一个包含指向几个类的指针的向量。这些类定义如下:

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

如何访问向量中每个类的工作变量?以下代码根本不打印,即使我知道某些类将其设置为true。

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

感谢您的帮助:)

2 个答案:

答案 0 :(得分:0)

尝试切换分配内存的行和使用push_back()的行。插入可能会使std :: vector中的指针无效。

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

答案 1 :(得分:0)

如果思考问题可能在进行类实例初始化的范围内。我知道实例,因此它们的成员在名称空间,静态和全局范围内由零值初始化,如果在此范围之一上创建对象的实例,这可能导致该字段的工作是init,默认值为“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.