2014-07-16 1 views
0

함수 클래스 내에서 클래스 벡터의 push_back을 사용하는 데 문제가 있습니다.함수 클래스 내에서 push_back을 사용하여 포인터 벡터의 크기를 업데이트

내 홈페이지 :

int main(int argc, char* argv[]) 
{ 

    //blah blah before here... 

    vector <C_Aerogerador*> ptrAerogeradores; 

    //the following lines are just for example 
    int size = 4; 
    for (int i = 0; i < size; i++) 
    { 
     ptrAerogeradores.push_back(new C_Aerogerador); 
    } 

    //OK, now I have a vector of pointer with size 4 

    //Creating an object of C_Aerogerador to call a function Class of C_Aerogerador 
    C_Aerogerador * teste = new C_Aerogerador; 

    teste->carregaConfig(ptrAerogeradores); 

    //PROBLEM! After the calling of the function carregaConfig the 
    // size of ptrAerogeradores is still 4 

} 

그리고 C_Aerogerador'Class의 기능 carregaConfig은 다음과 같습니다

void C_Aerogerador::carregaConfig(vector <C_Aerogerador*> ptrAerogerador) 
{ 

    //blah blah, setting some values in ptrAerogerador 
    // example: 
    ptrAerogerador[0]->areaVarrida = 5; 

    //after adding some values I want to push back the ptrAerogerador 
    ptrAerogerador.push_back(new C_Aerogerador); 
    // It didn't work. 
} 
+6

함수에 입력 매개 변수 벡터의 로컬 복사본이 있습니다. "참조로 전달"을 찾으십시오. – juanchopanza

+1

포인터가 정말로 필요한 경우, 스마트 포인터 또는'boost :: ptr_ '컨테이너를 사용하십시오. – chris

+0

@RodolfoCalderonMachado (아래 설명문), 요소가 복사됩니다. 복사 된 요소는 같은 위치를 가리 킵니다. – chris

답변

1

변경

내 코드는 [모든 변수 포르투갈어, 죄송에]입니다 귀하의 함수 서명은 이것을 참조하십시오. vector

void C_Aerogerador::carregaConfig(vector <C_Aerogerador*>& ptrAerogerador); 
                 //^Note 

그렇지 않으면 함수 매개 변수 스택에서 원래 vector 사본을 변경하는 것입니다.

+0

감사합니다 @ πάντα ῥεῖ! 그것은 효과가있다! –

+0

@RodolfoCalderonMachado De nada! 도와 줘서 기쁘다;) –