Не могу вызвать функцию в классе, возвращающем символ - PullRequest
0 голосов
/ 23 марта 2020

При попытке вызвать st.top()

string infixToPostfix(string hasil)
{
    Stack st;
    string postfix = "";

    for (int i = 0; i < hasil.length(); i++)
    {
        if (hasil[i] == ' ')
        {
            continue;
        }
        else if (isOperator(hasil[i]))
        {
            while (st.isEmpty() && hasHigherPrecedence(st.top(), hasil[i])) // the error is here
            {
                postfix = postfix + st.top(); // and here
            }

        }
    }
}


class Stack {

    public:
    int top = -1;
    char array[MAX];

    bool isEmpty()
    {
        if (top == -1)
        {
            return true;
        }
        else
        {
            return false;
        }
    }

    bool isFull()
    {
        if (top == (MAX-1))
        {
            return true;
        }
        else
        {
            return false;
        } 
    }

    void push(char masuk)
    {

        if (isFull())
        {
            cout << "Expresi yang anda masukkan telah melebihi stack" << endl;
        }
        else
        {
            top++;
            array[top] = masuk;
        }
    }

    void pop()
    {
        if (isEmpty())
            {
                cout << "Stack sudah kosong!" << endl;
            }
            else
            {
                top--;
            }
    }

    char top()
    {
        if (isEmpty())
        {
            cout << "Stack kosong" << endl;
        }
        else
        {
            return array[top];
        }
    }

};
возникает ошибка: выражение, предшествующее круглым скобкам видимого вызова, должно иметь (указатель на) тип функции "

1 Ответ

0 голосов
/ 23 марта 2020

У вас есть как переменная-член c publi , так и функция c publi, называемая top. Вы должны переименовать одну из них.

Вы также должны серьезно рассмотреть вопрос о создании переменной (и, действительно, всех переменных) private, так как в противном случае силы вне вашего класса могут свободно возиться с его внутренностями таким образом, что вам не понравится.

Весь смысл инкапсуляции заключается в том, чтобы скрывать подобные вещи от внешнего мира, чтобы у вашего класса было ограниченное количество вещей, которые он представляет. Например, с переменной publi c я мог бы просто сделать:

st.m_top = -2; // Assumes you've renamed it to distinguish from top().

, откинуться на спинку кресла и насладиться фейерверком: -)

...