2016-08-22 3 views
-5

나는 클래스 적 있습니다다시 초기화 벡터 값

class Enemy 
{ 
    Enemy(); 
    Enemy(string n, int u, int v, int p, int vy); 
    ~Enemy(); 
} 

내가 (방법이라고 싸움이 어디 클래스 게임이);

class Game 
{ 
    public: 
    Game(); 
    ~Game(); 
    void Fight(); 
    private: 
    vector<Enemy> e; 

} 
void Game::Fight() 
{ 
    e.push_back(Enemy("Skeleton",1,2,3,4)); 
    //code for displaying info about Enemy 
    //code for reducing hp 
} 

모든 전투 통화에서 Enemy의 값을 다시 초기화해야합니다.

+4

"너무 효과적이지 않다"는 것은 너무 애매합니다. 투표를 닫습니다. –

+0

벡터 요소는 e.clear() 이전에 수행 된 e의 복사본을 가지고 있습니다. 따라서 생성하고 지운 전자는 push_back()과 다릅니다. –

+1

idk 사람들이 왜 내가 다른 계정을 만들고 대답 대신에 같은 질문을 다시하기를 바란다 .. –

답변

0

계속 진행할 것은 많지 않지만 여기에 몇 가지 힌트가 있습니다.

  1. 당신이 할 수있는 std::vector 지역 Game::Fight()에 :

    void Game::Fight() 
    { 
        std::vector<Enemy> e = { {"Skeleton",1,2,3,4} }; 
        //... 
    } 
    
  2. 당신은 구성원 개체로 떠나 당신이 그것에 원수를 넣어 전에 취소 수 :

    void Game::Fight() 
    { 
        e.clear(); 
        e.push_back({"Skeleton",1,2,3,4}); 
        //... 
    } 
    
  3. 을 기본적으로 위와 동일하게 재 할당 할 수 있습니다.

    ,
    void Game::Fight() 
    { 
        e = { {"Skeleton",1,2,3,4} }; 
        //... 
    } 
    
  4. 당신은 거기에있어 현재의 적을 수정할 수 있지만 실제로 어쩌면 생성자에서, 어딘가에 첫번째에게 적의를 추가해야 할 것 :

    void Game::Fight() 
    { 
        e[0].hp = 100; 
        //... 
    } 
    
  5. 당신은 적을 질문을 할 수 Enemy::reset()을 추가하여을 재설정하십시오. 이 기능은 컴파일되지 않는 HP, MP 등 : (현재 게시)

    void Game::Fight() 
    { 
        e[0].reset(); 
        // ... 
    } 
    
0

코드를 재설정한다. 누락 된 항목, 누락 된 세미콜론 및 기타 여러 항목 이해하려는 문제를 컴파일하고 재생산하는 코드 만 제출해야합니다.

그리고 아직 어디로 향하고 있는지 추측 할 수있는 노력에 대한 정보가 너무 적습니다. 내 상상력은 일반적으로 나를 실패하는 첫 번째 일입니다. 나의 마음 독서 능력은 또한 붙잡는 것이 아주 느리다.

하지만 벡터 및 일부 디버그 스타일 출력에 대한 경험이 있습니다. (너무 많은 노이즈가 발생하면 를 주석으로 처리해야합니다).


다음은이 초기 코드를 모방 한 것입니다. 그것이 컴파일되고 실행되지만, 나는 당신의 특정 질문에 대답하지 않는다고 생각합니다. 그러나 아마 당신은 당신이 당신의 벡터에서 원하는 것을 고려할 필요가 있음을 보여줍니다. 예를 들어 "Copies"를 사용하면 ctors와 dtors가 모두 호출되므로 게임이 게임 중 더 많은 작업을 생성하지만 성능이 좋지 않을 때 성능에 영향을 줄 수 있지만 시작 및 종료시에는 좋을 수 있습니다.

class Enemy 
    { 
    static int M_id; 

    int m_id; 
    std::string m_s; 

    public: 
    Enemy() : m_id(++M_id) 
     { 
      std::cout << "ctor Enemy() [empty]" << m_id << std::endl; 
     }; 

    Enemy(std::string n, int u, int v, int p, int vy) : 
     m_id(++M_id) // default m_s ok 
     { 
      std::stringstream ss; 
      ss << "ctor Enemy: " << m_id << " " << n 
       << " " << u << " " << v << " " << p << " " << vy; 
      m_s = ss.str(); 
     }; 

    ~Enemy() 
     { 
      std::cout << "dtor ~Enemy() " << std::endl; 
     }; 

    std::string show() 
     { 
      std::string s ("Enemy show() E: "); 
      s += m_s; 
      return (s); 
     } 

    }; 

    int Enemy::M_id = 0; 

    class Game 
    { 
    public: 
    Game() // default ctor e is ok 
     { 
      e.reserve(100); 
      std::cout << "\n\nctor Game()" << std::endl; 
     }; 

    ~Game() 
     { 
      std::cout << "dtor !Game()" << std::endl; 
     }; 

    void Fight(int p4) 
     { 
      e.push_back(Enemy("Skeleton",1,2,3,p4)); 
      //code for displaying info about Enemy 
      //code for reducing hp 
     } 

    std::string show() 
     { 
      std::stringstream ss; 
      ss << " Game.show() e.size() = " << e.size() << "\n"; 
      for (auto el : e) 
      { 
       ss << el.show() << "\n"; 
      } 

      return (ss.str()); 
     } 


    private: 
    std::vector<Enemy> e; 
    }; 


    int t423(void) 
    { 
    { 
     Game g1; 
     std::cout << "\ng1.show(): " << g1.show() << std::endl; 

     g1.Fight(11); 
     std::cout << "\ng1.show(): " << g1.show() << std::endl; 

     g1.Fight(12); 
     std::cout << "\ng1.show(): " << g1.show() << std::endl; 

     g1.Fight(13); 
     std::cout << "\ng1.show(): " << g1.show() << std::endl; 

     std::cout << "\n --- leaving scope (of g1) " << std::endl; 
    } 

    std::cout << "\n --- triggers g1 and vector dtors (which triggers Enemy dtors)" << std::endl; 

    return(0); 
    }