0
我正在构建一个编程语言解释器,并且我正在编写堆栈代码。现在写入堆栈将只保存字节值,但它将被扩展以保存其他字节。目前,我在'BaseObject'和所有堆栈对象之间进行转换时遇到了问题,并且我的jbyte
类也出现了问题。这是我目前的测试代码。在编写堆栈实现时遇到困难C++
#include "stdafx.h"
#include <string>
#include <stack>
#include <iostream>
#include <Windows.h>
#include <stack>
using namespace std;
class BaseObject
{
public:
virtual string getIdentifier(){return "Not Implemented";}
};
class Stack
{
class jbyte : public BaseObject
{
private:
INT8 byteValue;
public:
jbyte(INT8 value)
{
byteValue = value;
}
INT8 getValue()
{
return byteValue;
}
};
private:
stack<BaseObject> objectStack;
public:
void pushByte(INT8 byteValue)
{
jbyte toPush(byteValue);
objectStack.push(toPush);
}
INT8 popByte()
{
if(objectStack.size() == 0)
{
cout<<"ERROR: Trying To Pop Value From Empty Stack\nPress Any Key To Continue...";
_gettch();
exit(1);
}
else
{
BaseObject& bo = objectStack.top();
jbyte& b = dynamic_cast<jbyte&>(bo);
}
}
};
int main()
{
Stack stack;
stack.pushByte(9);
stack.popByte();
while(true);
}
当我尝试但是运行此,我得到了一个StackTests.exe Unhandled exception at at 0x75C4C41F
:微软C++异常:的std :: bad_cast内存位置0x0034F858。
我想知道如何解决这个问题,或者如果这很困难,我该如何重写堆栈才能成功工作。
std :: stack st;'完成。还有一个有趣的机制,用于在main()'末尾“暂停”。也就是说,你需要更好地理解'dynamic_cast'的作用。 –
WhozCraig
但这只能保存字节,如果我想能够在堆栈上存储int,那该怎么办 – Popgalop
所以你想持有一个对象*和*一个附加的字节?那是对的吗? (如果是的话,你知道切片是什么东西)吗? – WhozCraig