不知道這裏發生了什麼。我有一個Vector3D的標準棧(我的導師給我的一個三維矢量類)。我已經將兩個Vector3D推到了堆棧上,但是當我用vectorStack.top()去到最頂層的時候,我被視爲非常無用的錯誤:'迭代器不可忽略'C++堆棧
調試斷言失敗!
表達:deque的迭代器不dereferenceble
我想也許有一些毛病的Vector3D拷貝構造函數,但我已經盡力使自己快速的Vector3D結構(刪除舊的我得到了),而且沒有按也不行!
下面是代碼:
D3Dapp.cpp
if (!lsys.initialised)
{
LSystem::ReproductionRule r1;
r1.from = 'F';
r1.to = "F+F-[FFF]";
lsys.rules.push_back(r1);
LSystem::ReproductionRule r2;
r2.from = 'F';
r2.to = "FF";
lsys.rules.push_back(r2);
lsys.result = lsys.generateResult("F", 0, 5);
lsys.currentPosition = Vector3D(0.0f,0.0f,0.0f);
lsys.vectorStack.push(lsys.currentPosition);
lsys.initialised = true;
}
lsys.result = "[FF]+FF";
if (!lsys.complete)
{
for (int i=0; i < lsys.result.length();i++)
{
// F move forward
if (lsys.result[i] == 'F')
{
float cosAng = cos(lsys.angle);
float sinAng = sin(lsys.angle);
Vector3D currentPosition(lsys.vectorStack.top());
Vector3D newPosition = Vector3D(
currentPosition.x + (cosAng * 0.5f),
currentPosition.y + (sinAng * 0.5f),
currentPosition.z);
//lsys.vectorStack.push(newPosition);
Vertex s, e;
s.x = currentPosition.x;
s.y = currentPosition.y;
s.z = currentPosition.z;
e.x = newPosition.x;
e.y = newPosition.y;
e.z = newPosition.z;
startList.push_back(s);
endList.push_back(e);
lsys.currentPosition = newPosition;
// + turn right
} else if (lsys.result[i] == '+')
{
float rdn = 3.141592f/180.0f;
lsys.angle = (lsys.angle + 20.0f);
// - turn left
} else if (lsys.result[i] == '-')
{
float rdn = 3.141592f/180.0f;
lsys.angle = (lsys.angle - 20.0f);
// [ push stack
} else if (lsys.result[i] == '[')
{
lsys.vectorStack.push(lsys.currentPosition);
// ] pop stack
} else if (lsys.result[i] == ']')
{
lsys.vectorStack.pop();
}
}
lsys.currentPosition = Vector3D(0.0f,0.0f,0.0f);
}
lsys.complete = true;
在l系統堆棧只是stack<Vector3D> vectorStack;
我已經嘗試了多種分配vectorStack.top()到當前位置,但沒有辦法似乎是加工。
爲了完整起見,這裏的構造函數的Vector3D:
Vector3D.h
Vector3D() {
x = y = z = 0;
}
Vector3D(double a, double b, double c) {
x = a;
y = b;
z = c;
}
Vector3D(const Vector3D& v) {
x = v.x;
y = v.y;
z = v.z;
}
編輯:爲了證明有東西在堆棧
這是在堆棧中拋出錯誤的行
如果您在調用'top'時收到該消息,表明您的容器已空。 –
我已經突然接到電話,並且自己檢查了堆棧中有2個Vector3D。相信我! – BouncingCzech
@BouncingCzech:如果你是對的,那麼你不需要在這裏發表一個問題。; - ] – ildjarn