2012-09-23 93 views
3

這可能是一個非常基本的錯誤,但我對C++很陌生,所以請不要判斷!修改類方法中的私有類變量?

基本上,我有兩個類,如下所示:

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); 
} 

我希望能夠調用B.f2(A)與定義的變量A和B具有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? 
} 

回答

2

,這是因爲您已通過通過A。相反,通過引用傳遞它。

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

,因爲它是現在,你的程序創建,然後一個變異副本var1

,當你不希望發生變異的參數,你可以把它作爲一個const引用:

void fn(const A& p); 
     ^^^^^^
+1

也做了工作。謝謝! – eigensheep