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

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

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

谢谢你的帮助 :)

4

2 回答 2

0

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

指向 std::vector 和 std::list 元素的指针

于 2012-08-06T11:51:17.093 回答
0

如果认为问题可能在执行类实例初始化的范围内。据我所知,实例,因此它们的成员在命名空间、静态和全局范围内由零值初始化,如果您在此范围之一上创建对象实例,这可能导致该文件的工作在默认值“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.
于 2012-08-06T12:14:03.323 回答