нужна помощь при отладке: неверное преобразование из 'token *' в 'char' [-fpermissive] - PullRequest
0 голосов
/ 16 января 2020

Вот мой код. Он продолжает говорить, что я делаю преобразование неправильно. Что я делаю не так, и может ли кто-нибудь помочь мне исправить это?

#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 впереди, но имейте в виду, что этот код, в частности, уже был передан в базу данных мха и должен использоваться для изучения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...