2012-09-23 6 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); 
} 

내가() 호출 A.f1 정의 된 변수 A와 B로 B.f2 (A)를 호출하고 F2를 가질 수 있도록하려면 다음과 같이

기본적으로, 두 개의 클래스를 가지고 (x, y)이다. 지금까지이 모든 것이 가능합니다. 그러나 함수 f1은 f2()가 반환 할 때 거기에없는 벡터 '이미지'에 값을 할당합니다. 어떤 아이디어? 당신이 에 의해 A을 통과하기 때문입니다

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

: 여기에 코드입니다. 대신 참조로 전달하십시오. 그것은 지금처럼

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

, 프로그램이 생성 한 다음 var1 복사 변이합니다. 당신이 매개 변수를 돌연변이 싶지 않을 때

, 당신은 const를 참조로 전달할 수 있습니다 일을했다

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

. 감사! – eigensheep

관련 문제