3

これはおそらく私が犯している本当に基本的なエラーですが、私はc ++にまったく慣れていないので、判断しないでください!

基本的に、次の2つのクラスがあります。

class A{
    private:
    vector< vector<int> > images;

    public:
    int f1(int X, int Y);
}

class B{
    private:
    int x;
    int y;

    public:
    int f2(A var);
}

定義された変数AとBを使用してB.f2(A)を呼び出し、f2()にA.f1(x、y)を呼び出せるようにしたい。これまでのところ、これはすべて機能します。ただし、関数f1は、f2()が戻ったときに存在しないベクトル'images'に値を割り当てます。なぜ何かアイデアはありますか?コードは次のとおりです。

int A::f1(int X, int Y){
    // Some stuff to resize images accordingly
    images[X][Y] = 4;
    return 0;
}

int B::f2(A var){
    var.f1(x, y);
    return 0;
}

int main(){
    A var1;
    B var2;

    // Stuff to set var2.x, var2.y
    var2.f2(var1);

    // HERE: var1.images IS UNCHANGED?
}
4

1 に答える 1

2

これは、Aを渡したためです。代わりに、参照によって渡します。

void fn(A& p);
         ^ << refer to the original object passed as the parameter.

現在のように、プログラムはのコピーを作成してから変更しますvar1

パラメータを変更したくない場合は、const参照として渡すことができます。

void fn(const A& p);
        ^^^^^  ^
于 2012-09-23T23:24:12.660 に答える