2012-02-17 11 views
1

だからここで取り上げる。 私は、ここで混乱しているベクトルイテレータの互換性のないランタイムエラー

#include "stdafx.h" 
#include "ObjectManager.h" 
#include "Game.h" 

ObjectManager::ObjectManager() 
{ 
} 

ObjectManager::~ObjectManager() 
{ 
    std::for_each(_objects.begin(),_objects.end(),ObjectDeallocator()); 
    std::for_each(_dynamicObjects.begin(),_dynamicObjects.end(),DynamicObjectDeallocator()); 
} 


void ObjectManager::Add(std::string name, VisibleGameObject *object) 
{ 
    _objects.insert(std::pair<std::string, VisibleGameObject*>(name,object)); 
} 

void ObjectManager::Remove(std::string name) 
{ 
    std::map<std::string, VisibleGameObject*>::iterator results = _objects.find(name); 
    if (results != _objects.end()) 
    { 
     delete results->second; 
     _objects.erase(results); 
    } 
} 

int ObjectManager::GetObjectCount() const 
{ 
    return _objects.size(); 
} 

VisibleGameObject* ObjectManager::Get(std::string name) const 
{ 
    std::map<std::string, VisibleGameObject*>::const_iterator results = _objects.find(name); 
    if (results == _objects.end()) 
     return NULL; 
    return results->second; 
} 


void ObjectManager::AddDynamic(VisibleGameObject *object) 
{ 
    _dynamicObjects.push_back(object); 
} 

void ObjectManager::PostRemoveDynamic() 
{ 
     std::vector<VisibleGameObject*>::const_iterator iter = _dynamicObjects.begin(); 
    while(iter != _dynamicObjects.end()) 
    { 
     if ((*iter)->IsDeleted()) 
     { 
      delete (*iter); 
      _dynamicObjects.erase(iter); 
     } 
    iter++; 
    } 
} 

const std::vector<VisibleGameObject*>& ObjectManager::GetDynamicContainer() 
{ 
    return _dynamicObjects; 
} 


void ObjectManager::DrawAll(sf::RenderWindow& renderWindow) 
{ 
    std::map<std::string, VisibleGameObject*>::const_iterator itr = _objects.begin(); 
    while(itr != _objects.end()) 
    { 
     itr->second->Draw(renderWindow); 
     itr++; 
    } 

    std::vector<VisibleGameObject*>::const_iterator iter = _dynamicObjects.begin(); 
    while(iter != _dynamicObjects.end()) 
    { 
     (*iter)->Draw(renderWindow); 
     iter++; 
    } 
} 

void ObjectManager::UpdateAll() 
{ 
    std::map<std::string, VisibleGameObject*>::const_iterator itr = _objects.begin(); 
    std::vector<VisibleGameObject*>::iterator iter; 
    iter = _dynamicObjects.begin(); 

    float timeDelta = GameEngine::GetWindow().GetFrameTime(); 

    while(itr != _objects.end()) 
    { 
     itr->second->Update(timeDelta); 
     itr++; 
    } 

    while(iter != _dynamicObjects.end()) 
    { 
     (*iter)->Update(timeDelta); 
     iter++; 
    } 

} 

と、ブレークポイントを使用して、私は問題はここで、この関数である決定した、具体的

void ObjectManager::UpdateAll() 
{ 
    std::map<std::string, VisibleGameObject*>::const_iterator itr = _objects.begin(); 
    std::vector<VisibleGameObject*>::iterator iter; 
    iter = _dynamicObjects.begin(); 

    float timeDelta = GameEngine::GetWindow().GetFrameTime(); 

    while(itr != _objects.end()) 
    { 
     itr->second->Update(timeDelta); 
     itr++; 
    } 

    while(iter != _dynamicObjects.end()) 
    { 
     (*iter)->Update(timeDelta); 
     iter++; 
    } 

} 

、このライン、

(*iter)->Update(timeDelta); 

をコンテナクラスを有します私のインターネット検索は答えを出していないので、今私はあなたにこの不具合を起こしていることを尋ねています。もし誰かがそれを見る必要があれば、私はヘッダーを投稿します。また、これはオンラインチュートリアルの修正されたクラスです。

編集:エラーメッセージは、ベクトルクラスの組み込みのアサートからである(式:ベクトルは、互換性のないイテレータ)。

+0

*正確なエラーメッセージは何ですか? –

答えて

0

さて、私はそれを考え出したいくつかの睡眠の後。他の人への警告として、問題はイタレータが定義された後に新しい動的オブジェクトを作成して更新しているオブジェクトの1つで、無効にしています。いったんコンピュータにアクセスできるようになると、これを説明するコードを編集します。

関連する問題