4

他の場所で答えを見つけることができなかったので、これを尋ねる必要があると思います: 以下のように、(int ポインターが格納されている) ベクターのエイリアスを取得しようとしています:

    void conversion(Engine * ENGINES) 
    {//The Engine class has a vector of int* as a public data member called SITE
        for (int i = 0; i < 3; i++)
        {
            vector <int*>* current = &(ENGINES[i].SITE);//the problematic line
            int j_max = current -> size();
            cout << j_max << endl;
            for (int j = 0; j < j_max; j++)
            {
                for (int k = 0; k < 3; k++)
                {
                     if (*current[j][k] == 2)
                    *current[j][k] = 1;
                     if (*current[j][k] == -1)
                    *current[j][k] = 0;
                }
            }
        }
    }

問題は、*current[a][b] のインデックスが反転しているように見えることです。current を法線ベクトルとして使用できるようにしたいのですが、次のようにインデックス付けが逆になっています。

vector <int*> current1 = ENGINES[1].SITE;

その*current[i][j] = current1[j][i]ため、何らかの理由で。構文に誤りがありますか?

4

3 に答える 3

3

あなたの問題は[]、 unary よりも優先順位が高いと思います*。したがって、*(current[j][k])代わりにが得られます(*current)[j][k]。これが必要です。

ただし、ポインターではなく参照を取得するだけで、その問題を解決できます。

vector <int*>& current = (ENGINES[i].SITE);へのアクセス時に余分な読み込み*演算子を削除するだけcurrentです。

于 2013-04-09T17:14:38.187 に答える
1

問題は、(逆参照)[]よりも優先順位が高いため、として解釈されますが、これはおそらくあなたが望むものではありません。**current[i][j]*(current[i][j])

実際、このエイリアシングのイディオムは、一般的にポインターではなく参照として表現されます。

vector <int*>& current = ENGINES[i].SITE;

と簡単に使用しますcurrent[i][j]

于 2013-04-09T17:14:43.630 に答える
0

私のコメントで疑ったように、参照を使用してください。

vector <int*> &current = ENGINES[i].SITE;
于 2013-04-09T17:16:15.240 に答える