ошибка: аргумент типа char (CharStack ::) () const throw (CharStack :: Underflow) ’не соответствует‘ char ’ - PullRequest
0 голосов
/ 09 марта 2012

Название вопроса - сама ошибка, но я также включу ее ниже:

error: argument of type ‘char (CharStack::)()const throw (CharStack::Underflow)’ does not match ‘char’

Вот кодовый файл, который я использую:

#include <iostream>
#include "CharStack.h"
using namespace std;

// returns top value on stack
// throws exception if empty
//
// O(n)
char CharStack::top() const throw( Underflow )
{
    Elem * cur = head;

    if( !empty() )
    {
        while( cur && cur -> next )
            cur = cur -> next;

        return cur -> info;
    }
}


int main()
{
    CharStack * stack = new CharStack();

    char top = stack -> top;

    stack -> push( 't' );
    stack -> push( 'e' );
    stack -> push( 's' );
    stack -> push( 't' );
    stack -> push( 'i' );
    stack -> push( 'n' );
    stack -> push( 'g' );

    stack -> output( cout );

    delete stack;
}

InЗаголовочный файл, который я определяю двумя исключениями, которые я использую, в качестве примера, который я привожу:ситуация.

Спасибо

1 Ответ

2 голосов
/ 09 марта 2012
return cur -> info;

Является ли info функцией-членом, которая возвращает char? Тогда вы должны использовать:

return cur -> info();

в противном случае вы возвращаете указатель на функцию-член, а не символ.

То же самое для этого:

char top = stack -> top;

stack->top - указатель на функцию-член, stack->top() - это вызов функции top объекта stack.

Кстати, ваша функция top ничего не возвращает, если empty() истинно, что недопустимо. Вам нужно либо вернуть char, либо бросить, но выход из функции без возврата или броска не в порядке.

...