Eclipse抱怨递归函数调用

Eclipse complains about recursive function call

本文关键字:函数调用 递归 Eclipse      更新时间:2023-10-16

一个简单的二叉搜索树类声明:

#include <vector>
#include <stdio.h>
// Provides various structures utilized by search algorithms.
// Represents an generalized node with integer value and a set of children.
class Node {
protected:
    std::vector<Node*> children;
    int value;
public:
    //Creates a new instance of a Node with a default value=-1.
    Node(){value = -1;}
    //Creates a new instance of a Node with a specified value.
    explicit Node(int value){this->value = value;}
    virtual ~Node(){delete children;}
    //Adds new Node with specified value to the list of child nodes. Multiple
    //children with the same value are allowed.
    //Returns added node.
    virtual Node* Insert(int value);
    //Removes first occurrence of a Node with specified value among children.
    virtual void Remove(int value);
};
// Represents a binary search tree node with at most two children.
class BTNode: public Node {
public:
    //Creates a new instance of a BTNode with a default value=-1.
    BTNode():Node(){}
    //Creates a new instance of a BTNode with a specified value.
    explicit BTNode(int value):Node(value){}
    //Adds new BTNode with specified value to the list of child nodes in an
    //ordered manner, that is right child value is >= value of this node and
    //left child value < value of this node.
    virtual BTNode* Insert(int value);
    //Removes first occurrence of a Node with specified value from the tree.
    virtual void Remove(int value);
    //Returns a node with specified value.
    virtual BTNode* Search(int value);
};

和eclipse抱怨它的定义:

BTNode* BTNode::Search(int value){
    if (this->value == value) return *this;
    //Determines whether value is in left(0) or right(1) child.
    int child = this->value > value ? 0 : 1;
    if (children[child] != NULL)
        return children[child]->Search(value);
    return NULL;
}

准确地显示调用children[child]->Search(value)发生的位置,并显示消息"method Search无法被解析"。构建运行良好(没有任何编译错误)。这有什么问题吗?

注:我还没有试着运行代码。正在努力

SearchBTNode接口的一部分,但它不是Node接口的一部分,childrenNode*vector,因此在Node *上调用Search是无效的。如果NodeSearch方法是有意义的,那么将其添加到Node将解决该问题。如果没有,那么你需要重新考虑你的设计,这可能超出了这个问题的范围。

还有其他一些问题。你有:

virtual ~Node(){delete children;}

但是children不是pointer,它是std::vector<Node*>。您需要遍历vector并调用delete每个元素。在Search你有这个:

if (this->value == value) return *this;

但是Search返回一个BTNode*,所以它应该是:

if (this->value == value)  return this ;