错误:类型'char(CharStack ::)()const throw(CharStack :: Underflow)'的参数与'char'不匹配

时间:2012-03-08 20:24:20

标签: c++ exception-handling compile-time

问题的标题是错误本身,但我也将其包含在下面:

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;
}

在头文件中,我定义了我使用的两个例外,我将遵循以下示例:

     public:
     // exceptions
        class Overflow{};
        class Underflow{};

我认为这是因为我没有处理摘录,但在目前的情况下我不知道如何处理它。

谢谢

1 个答案:

答案 0 :(得分:2)

return cur -> info;

info是否为返回char的成员函数?然后你应该使用:

return cur -> info();

否则你将返回指向成员的指针函数,而不是char。

同样如此:

char top = stack -> top;

stack->top是成员函数指针,stack->top()是对top对象的stack函数的调用。

顺便说一句,如果top为真,则empty()函数不会返回任何内容,这是非法的。你需要返回一个char或者抛出,但离开函数而不返回或抛出是不正确的。