错误:没有用于调用'Stack <int> :: Peek()'</int>的匹配函数

时间:2014-02-14 00:40:18

标签: c++

我一直收到以下错误:错误:没有匹配函数来调用'Stack :: Peek()'

我是C ++的新手,我无法弄清楚为什么我会收到错误

这是我的Peek()函数。

int Peek(T data)
{
    if(IsEmpty ())
        return -1;
     else
        return top -> data;

}

这是我的main()函数。

int main()
{
    Stack<int> s1;

    cout << "*declare stack s1\ns1=" << s1 << endl; // stack initially set to 0
    cout << "s1.Size()=" << s1.Size() << endl;
    cout << "s1.IsEmpty()=" << ((s1.IsEmpty()) ? "T" : "F") << endl;
    cout << "s1.IsFull()=" << ((s1.IsFull()) ? "T" : "F") << endl;
    cout << "s1.Peek()=" << s1.Peek() << endl;
    cout << endl;

    Stack<char> s4;

    for (char c='a'; c<='z'; c++)s4.Push(c);
    cout << "s4=" << s4 << endl;
    cout << "s4.Size()=" << s4.Size() << endl;
    cout << "s4.IsEmpty()=" << ((s4.IsEmpty()) ? "T" : "F") << endl;
    cout << "s4.IsFull()=" << ((s4.IsFull()) ? "T" : "F") << endl;
    cout << "s4.Peek()=" << s4.Peek() << endl;
}

每当在main中调用Peek函数时我都会收到错误,所以我想知道是否有人可以帮助我。

3 个答案:

答案 0 :(得分:0)

您定义了一个Peek方法,但没有定义Stack :: Peek。您的方法应该有此签名:int Stack::Peek(T data)

答案 1 :(得分:0)

因为你在没有任何争论的情况下调用它。你的声明:

int Peek(T data)

您的调用:

s4.Peek()

确实堆栈数据类型不需要peek函数的参数(也不使用它)。您应该将原始功能修改为int Peek()

答案 2 :(得分:0)

您的函数Peak被声明为具有一个参数

int Peek(T data);

但是你没有任何争论就称之为

cout << "s1.Peek()=" << s1.Peek() << endl;

因此,编译器不知道名称为Peak且没有参数的函数。