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

クラスのインスタンスの初期化が実行されるスコープに問題があると思われる場合。私が知っているように、インスタンス、したがってそれらのメンバーは、名前空間、静的スコープ、およびグローバルスコープでゼロ値によって初期化されます。このスコープのいずれかでオブジェクトのインスタンスを作成すると、ファイルがデフォルト値「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 に答える
0

メモリを割り当てている行と push_back() を使用している行を切り替えてみてください。挿入により、std::vector 内のポインターが無効になる場合があります。

std::vector および std::list の要素へのポインタ

于 2012-08-06T11:51:17.093 に答える