Вот мой код. Он продолжает говорить, что я делаю преобразование неправильно. Что я делаю не так, и может ли кто-нибудь помочь мне исправить это?
#include <iostream>
#include <fstream>
#include "StackAr.h"
using namespace std;
struct token{
int curLine = 1, lastLine = 1;
char next;
};
int main(int argc, char *argv[])
{
ifstream inf(argv[1]);
token t1;
typedef token *t_ptr; //assign a pointer to a struct
t_ptr ptr = &t1;
t_ptr end;
StackAr<t_ptr> stack;
while (inf >> t1.next)
{
if (t1.next == '{' || t1.next == '(' || t1.next == '[')
{
t1.lastLine = t1.curLine;
ptr -> next;
stack.push(ptr);
new token;
}
else if (t1.next == '}' || t1.next == ')' || t1.next == ']')
{
t1.lastLine = t1.curLine;
char previous = stack.topAndPop(); // get previous bracket
// deal with null
switch(t1.next)
{
case '}' : if (previous != '{') {printError(&t1.next, t1.curLine); return 1;} break;
case ')' : if (previous != '(') {printError(&t1.next, t1.curLine); return 1;} break;
case ']' : if (previous != '[') {printError(&t1.next, t1.curLine); return 1;} break;
}
}
if (inf.peek() == '\n')
t1.curLine++;
}
inf.close();
if (!stack.isEmpty())
{
char previous = stack.topAndPop()-> next;
printError(&previous, t1.lastLine);
return 1;
}
cout << "OK" << endl;
return 0;
}
В функции int main(int, char**)
:
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;
edit: приведенный выше код получил временное исправление как предложенный одним из пользователей в разделе комментариев, но я полностью рекомендую использовать лучшую структуру, также посмотрите на комментарии. Учитывая уведомление любого, кто планирует использовать это, go впереди, но имейте в виду, что этот код, в частности, уже был передан в базу данных мха и должен использоваться для изучения.