C++ 调试错误需要帮助:从‘;转换无效;代币*’;至‘;char’;[-fpermissive]

C++ 调试错误需要帮助:从‘;转换无效;代币*’;至‘;char’;[-fpermissive],c++,debugging,struct,compiler-errors,char,C++,Debugging,Struct,Compiler Errors,Char,这是我的密码。它一直在说我做了错误的转换。我做错了什么,有人能帮我解决吗 #包括 #包括 #包括“StackAr.h” 使用名称空间std; 结构令牌{ int curLine=1,lastLine=1; 下一步; }; int main(int argc,char*argv[]) { ifstream-inf(argv[1]); 令牌t1; typedef token*t_ptr;//将指针分配给结构 t_ptr ptr=&t1; t_ptr端; 堆垛机; while(inf>>t1.next

这是我的密码。它一直在说我做了错误的转换。我做错了什么,有人能帮我解决吗

#包括
#包括
#包括“StackAr.h”
使用名称空间std;
结构令牌{
int curLine=1,lastLine=1;
下一步;
};
int main(int argc,char*argv[])
{
ifstream-inf(argv[1]);
令牌t1;
typedef token*t_ptr;//将指针分配给结构
t_ptr ptr=&t1;
t_ptr端;
堆垛机;
while(inf>>t1.next)
{
如果(t1.next=='{'| | t1.next==''('| | t1.next==='['))
{
t1.lastLine=t1.curLine;
ptr->next;
堆栈推送(ptr);
新代币;
}
else如果(t1.next='}'| | t1.next=')'| | t1.next==']'))
{
t1.lastLine=t1.curLine;
char previous=stack.topAndPop();//获取上一个括号
//处理空
开关(t1.next)
{
大小写“}”:if(previous!='{'){printError(&t1.next,t1.curLine);返回1;}break;
case'):if(previous!='('){printError(&t1.next,t1.curLine);返回1;}break;
大小写']':if(previous!='['){printError(&t1.next,t1.curLine);返回1;}break;
}
}
如果(inf.peek()='\n')
t1.curLine++;
}
inf.close();
如果(!stack.isEmpty())
{
char previous=stack.topAndPop()->next;
打印错误(&previous,t1.lastLine);
返回1;
}

拼写错误?
char-previous=stack.topAndPop();
可能应该是
char-previous=stack.topAndPop()->接下来;
此代码没有什么意义。您正在将一组指针推入堆栈中,所有指针都指向同一个
令牌
实例。您对它所做的任何更改都会反映在所有指针中。
新建令牌;
是内存泄漏,您没有保存
新建
返回的指针,以便以后可以
删除
it。你为什么要使用一堆指针呢?你应该使用
StackAr
而不是
StackAr
。更好的是,使用
std::stack
而不是
StackAr
。感谢yksisarvinen和Remy:)关于使用just token这非常有帮助,因为我为什么会使用“stackar”简短答案,受课程限制,但你们两人都给出了非常有用的提示和欢呼。
mockbalance.cpp:64:38: error: invalid conversion from ‘`token*`’ to ‘`char`’ [-fpermissive]

    char previous = stack.topAndPop(); // get previous bracket

mockbalance.cpp:82:36: error: invalid conversion from ‘`token*`’ to ‘`char`’ [-fpermissive]

    char previous = stack.topAndPop()-> next;