這是一個刺痛點:\。這是我的映射聲明:指向向量指針的地圖的錯誤
std::map<std::string, std::shared_ptr<std::vector<std::shared_ptr<BaseEntity> > > > m_EntityByClassList;
真的,它是如此長的唯一原因是因爲智能指針聲明,這是非常簡單,只是這樣的:
std::map<std::string, std::vector<BaseEntity *> *> m_EntityByClassList;
還是痛苦的,雖然閱讀。這是我的問題。當我嘗試在地圖中插入一個對象到一個新的向量中時,我得到「訪問衝突試圖讀取」運行時錯誤。
的是產生這個錯誤是這樣的代碼塊,
for(;;)
{
file >> classname;
if(file.eof())
break;
m_EntityList.push_back(m_factory.createInstance(classname));
m_EntityList.back()->Initialize();
m_EntityList.back()->GetParams(file);
m_EntityByNameList[m_EntityList.back()->GetName()] = m_EntityList.back();
m_EntityByClassList[classname]->push_back(m_EntityList.back());
}
現在是的,有certaintly很多的代碼,我正在省略這裏,主要是因爲那裏有一個很好的35分或36的對象和文件進入這是在這裏,所以我只是要列出相關的事情。文件是一個std::ifstream
一個打開的文件,類名是std::string
,m_EntityList是std::vector<std::shared_ptr<BaseEntity> >
(不應該的問題),m_EntityByNameList是地圖具有索引鍵入std::string
和對象類型std::shared_ptr<BaseEntity>
(也應該沒有關係),然後以上地圖所有上述最後一項的陳述與完整的結果完全一致。如果最後一行被省略,它就會編譯並且工作得很花哨。
所以這個問題與其餘的文件無關,只是試圖添加一個向量到地圖並添加對象。如果你覺得你還需要別的什麼,請問我會在這裏發佈。發佈一切將很容易4000-4500線。
Annnnyway,我從this得知的地圖是,使用帶有尚未存在的指令的[]運算符將爲您創建一個,並在該索引處創建一個默認構造對象。所以我從中得到的是,將在索引classname處創建一個std::shared_ptr<std::vector<std::shared_ptr<BaseEntity> > >
,這意味着我應該能夠訪問該矢量,無論它是事先創建還是之前創建。那麼有沒有人有什麼線索是什麼?
一些'typedef's可能會幫助你... –
@Oli Charlesworth:是的,不是在開玩笑:P – FatalCatharsis