检查c ++中是否存在错误

时间:2011-11-14 17:23:26

标签: c++ pointers

问题:“类型'bool的参数(BST :: Node ::)(int)'与'bool'不匹配 “是吗?


的信息:

我正在进行分配以制作二叉搜索树。我的“包含”函数不能编译:

    bool contains(Item val)
    {
        if(val == myItem) return true;
        if(val < myItem)
            if (myLeft) return myLeft->contains;
            else return false;
        if(myRight) return myRight->contains;
        return false;

    }

我在跟踪节点之前使用if(myLeft)if(myRight)检查是否存在。但我收到以下错误消息:

BST.h:100:38: error: argument of type ‘bool (BST<int>::Node::)(int)’ does not match ‘bool’
BST.h:102:32: error: argument of type ‘bool (BST<int>::Node::)(int)’ does not match ‘bool’

第100行和第102行是包含if(myLeft)和if(myRight)的行。令人讨厌的部分是我的插入功能正常工作:

    void insert(Item val)

    {
        if(val < myItem)

            if (myLeft)

                myLeft->insert(val);

            else

                myLeft = new Node(val);

        else if(val > myItem)

            if (myRight)

                myRight->insert(val);

            else

                myRight = new Node(val);
        else throw Exception("Insert()","Can't add duplicate values");

    }

然而我却完全一样。我试图更改它以检查NULL,因此它变为if(myLeft!=NULL)并且它给出了相同的错误。关于我在这里缺少什么的线索?

3 个答案:

答案 0 :(得分:4)

您正在尝试返回函数指针而不是调用函数的结果。

试试这个:

bool contains(Item val)
{
    if(val == myItem) return true;
    if(val < myItem)
        if (myLeft) return myLeft->contains(val);
        else return false;
    if(myRight) return myRight->contains(val);
    return false;

}

答案 1 :(得分:1)

->contains更改为->contains(val)

答案 2 :(得分:1)

简单的拼写错误:

 if (myLeft) return myLeft->contains;

应该是

 if (myLeft) return myLeft->contains(val);

对于使用contains的其他实例也是如此。

错误告诉您在应该返回bool时尝试返回函数指针。