我有這樣的結構:的std ::矢量斷言失敗(矢量迭代器不兼容)
struct MxMInstanceData
{
D3DXVECTOR2 mTransform;
float mSpacing;
};
然後,我創建MxMInstanceData的向量:
std::vector<MxMInstanceData> instInFrustumData;
如果我打電話instInFrustumData.clear()
我得到這個錯誤:
Assertion failed (vector iterators incompatible)
向量生成代碼:
instInFrustumData.reserve(mNumInstances);
矢量更新代碼:
void Terrain::updateInstances()
{
mNumInstancesInFrustum = 0;
if(instInFrustumData.size() != 0)
instInFrustumData.clear();
mpMxMInstInFrustumB->Map(D3D10_MAP_WRITE_DISCARD, NULL, (void**) &instInFrustumData);
for(int x = 0; x < mNumInstances; x++)
{
if(mpCamera->point2DInFrustum(instData[x].mTransform +
D3DXVECTOR2(instData[x].mSpacing/2 + mpCamera->getPosition().x, instData[x].mSpacing/2 + mpCamera->getPosition().z), instData[x].mSpacing/2)
!= OUTSIDE)
{
instInFrustumData.push_back(instData[x]);
mNumInstancesInFrustum++;
}
}
mpMxMInstInFrustumB->Unmap();
}
什麼能做到這一點?
而在我的類的析構函數我也呼籲猜測這裏的明確()
您的發佈代碼不能 - 因此發佈更多。 – Erik 2011-04-28 18:20:02
我發現另一件事:在創建矢量後,我調整它的大小以使其大小=容量。我打電話給clear()和它的ok,所以size = 0容量= 100,然後我只填寫8個值,當我再次打電話給clear時(第二次),錯誤被拋出 – 2011-04-28 18:21:56
可能會發生這種情況的是可互換使用const和非const迭代器。然而,你需要發佈你的實際代碼,因爲你在這裏沒有造成這個錯誤。 – AJG85 2011-04-28 18:23:01