3

unit要素を持つクラスがありますint holding[4];

void main()
{
    vector<vector<unit> > allunits;
    vector<vector<short> > selectedunits; //This contains certain indexes for the above vector
    allunits.resize(2);
    selectedunits.resize(2);
    allunits[0].resize(5);
    int *ptr = &allunits[0][selectedunits[0][0]].holding[0]; //obviously dysfunctional
}

私が欲しいのは、このポインターが指すものを動的に変更することです。の値が変更されたときに、の新しい値を自動的にポイントしselectedunits[0][0]たいと思います。が空のベクトルの場合、何でもかまいませんが、実行時エラーをスローすることはできません。これが現在の動作です。ptrallunits[0][selectedunits[0][0]].holding[0]selectedunits[0]ptr

したがって、後でコードを持っている場合は、をポイントしselectedunits[0].push_back(2);たいので、その行はポイントを作成する必要がありますptrallunits[0][2].holding[0]selectedunits[0][0]=1;ptrallunits[0][1].holding[0]

編集:このコードのポイント:
これはすべてゲーム用です。allunitsは単位のベクトルであり、selectedunits選択された単位を格納します。どちらも[player][index]に編成されているため、2次元です。allunits[0]最初のプレイヤーのユニットを保持します。

特定の条件下で、画面にテキストを出力するオブジェクトのコンストラクターにポインターが渡されます。印刷されるテキストは、選択されたユニットに関する情報であり、ポインタが指している番号が含まれています。別のオブジェクトは別のデータ、つまりポインタを出力します。

4

1 に答える 1

0

関数またはクラスを使用します。C ++ 11を使用している場合は、ベクターにバインドするラムダをローカルで作成します。それ以外の場合は、ベクトルをconst by-reference引数として受け取る関数を作成するか、ベクトルを独自のクラスに移動して、アクセサーコードをメンバー関数に配置します。

于 2012-12-24T21:10:17.577 に答える