向stack<wchar_t>压入字符时编译报错,该如何解决?
解决
stack<wchar_t>添加元素的类型不匹配编译错误 你碰到的这个编译错误,核心原因是类型不匹配:你用的L"("是宽字符串字面量,它的实际类型是const wchar_t[2](因为C++里字符串字面量会自动在末尾加一个\0结束符),而你的tokenStack是用来存储单个wchar_t字符的栈,这俩类型完全不兼容,编译器当然会报错。
要解决这个问题,只需要把宽字符串字面量换成宽字符字面量就行——把双引号改成单引号:
void doLeftParen() { tokenStack.push( L'(' ); }
这里再给你明确下两者的区别:
L"(":表示一个包含左括号和结束符的宽字符串,本质是数组类型L'(':表示单个宽字符,类型就是wchar_t,完美匹配栈的元素类型
如果是添加普通ASCII字符,同样要用单引号,比如L'b';当然直接写'b'也能正常编译(因为ASCII字符可以隐式转换为wchar_t),但为了保持宽字符类型的一致性,更推荐加上L前缀。
另外提一句,你原代码里函数末尾少了分号,修改的时候记得补上,不然还会触发另一个编译错误哦。
内容的提问来源于stack exchange,提问作者David
相关产品推荐
相关产品推荐

