我相信大多数情况下这是一个非常简单的问题。但我正在用c ++编写XML的令牌recoginzer,我正在使用堆栈来确保匹配的开始和结束标记。好吧,我的标签是c字符串......
char BeginTag[MAX];
我想把它推到我的模板堆栈上。但我不确定通过堆栈的类型。我试过......
stack<char> TagStack;
但这不起作用。我已经尝试了一些其他解决方案,但似乎没有工作。有人能帮助我吗?
答案 0 :(得分:3)
数组不可分配,因此不能用作容器值类型。
您可以定义包含数组的struct ,然后使用:
struct Tag {
char name[MAX];
};
stack<Tag> TagStack;
或者只为您的代码使用std::string
。
答案 1 :(得分:1)
如果你发布了不起作用的代码,它会有所帮助,并告诉我们它是如何工作的。 (编译时错误?运行时错误?)但我的建议是使用std :: string,至少在堆栈上:
using namespace std;
stack<string> TagStack;
你应该能够在没有明确演员的情况下进入筹码:
TagStack.push(BeginTag);
注意:我不认可您为此目的使用C字符串;我也在tokenizer中使用std :: string。但那是你的电话。如果继续使用char数组,则可能需要将char [MAX]更改为char [MAX + 1],因为MAX通常用于表示字符串中的最大非空字符数。因此,您需要确保为终止null分配了一个额外的char。这可能只是一个样式问题,但它也可能有助于防止错误。