2014-06-18 5 views
0

내 vector.erase() 함수는 나에게 오류를 제공 -> "오류 C2582 : '연산자 ='기능은 '화재'여기 벡터 배열이 작동하지 소거

코드이며, 벡터에 선언에서 사용할 수 없습니다 헤더 파일. 어떤 도움이 감사

.

//header 
std::vector<Fire> _fires; 

//cpp 
void Fire::update() 
{ 
    for (unsigned int i = 0; i < _fires.size(); i++) 
    { 

    _fires[i].lifeTimer(); // updates the lifetime for all objects 

     if (_fires[i]._lifetime >= 200) 
     { 
      _fires.erase(_fires.begin() + i); //erase not working 
     } 
    } 
} 
+0

당신은 질문을 잊어 버렸습니다. 이것에 대해 어떻게 이해하지 못하겠습니까? 오류 메시지가 완전히 문제를 설명하는 것 같습니다. –

+0

'Fire :: update()'가 정적 멤버 함수가되기를 바랍니다. –

답변

0

나는 기본적인 문제는 당신이 다른 두 가지 않는 하나의 클래스 설계를 시도한다는 것입니다 생각 :

  • 화재의 동작을 구현 화재의 벡터를 포함를

훨씬 더 좋은 디자인은 두 개의 별도 클래스를 갖는 것입니다.

1 화재의 행동을 구현하는 클래스

2 화재 벡터를 포함하고있는 클래스로, 벡터에 포함 된 화재를 반복하기 위해 update와 같은 메소드를 구현하여 fire 메소드를 호출합니다.

그것은 다음과 같을 것이다 :

class Fire { 
    // implements individual method on an instance of fire, such as liefetime 
}; 

class FireContainer { 
    // implements method to deal with all the fires, such as update 
    std:: vector<Fire> myFires; 

}; 

그러나, 당신은 하나의 클래스를 계속, 글로벌 (일반적으로 간주 나쁜 관행)와 같은 화재의 벡터를하려는 경우 다음 방법 업데이트가 안 Fire 클래스의 멤버이지만 무료 함수입니다.

+0

도움 주셔서 감사합니다. 나는 당신의 제안에 따라 벡터 배열을위한 별도의 클래스를 만들었지 만 다소 수정했지만 다른 문제는 끝났습니다. 이제 화재가 삭제되면 흰색 사각형이 두 번째 또는 두 번째 다른 화재에 나타납니다. 확실하지는 않지만 어레이가 빈 자리를 채워야하기 때문에 짐작할 수 있습니다. – rolfeva

+0

nvm 나는 파괴 된 모든 화재에 대한 질감을 설정하여 고정되었습니다. – rolfeva

2

당신의 Fire 클래스는 할당 연산자를 가지고 있지 않거나 액세스 할 수 없습니다.

그러나 0 http://www.cplusplus.com/reference/vector/vector/erase/이 가리키는 것처럼 요소를 지우면 요소가 재배치 될 수 있으므로 구현시에는구현이 필요합니다.