C++ 递归函数中的奇异返回行为

C++ 递归函数中的奇异返回行为,c++,recursion,tree,C++,Recursion,Tree,我有这样一个树节点类: class Node { public: Node(); Node(char _value); ~Node(); char getValue() const; Node* getParent() const; void addChild(Node* _child); bool isLeaf() const; bool isRoot() const; bool hasChild(char _value

我有这样一个树节点类:

class Node
{
public:
    Node();
    Node(char _value);
    ~Node();

    char getValue() const;
    Node* getParent() const;
    void addChild(Node* _child);
    bool isLeaf() const;
    bool isRoot() const;
    bool hasChild(char _value) const;
private:
    vector<Node*> children;
    char value;
    Node* parent;
};
但是,当我运行这段代码时,tmp变量总是false。如果我使用调试器跟踪它,则返回true;部分执行,但递归继续。有什么建议吗

Node* root = new Node();
Node* a = new Node('a');
Node* c = new Node('c');

root->addChild(a);
root->addChild(c);

bool tmp = root->hasChild('a');
您的问题在于hasChild的自我称呼方式:

(*it)->hasChild(_value);
您调用它,但不使用返回值执行任何操作。您可能希望尝试返回结果

因为您的算法似乎指示一个未排序的树,所以这不像在语句前面加上return那样简单。您可能需要检查true并返回它,但false表示继续查找:

if ((*it)->hasChild(_value))
    return true;
您还需要在函数末尾返回false。

您的hasChild代码有两个主要缺陷,它永远无法返回false,并且您在以下行调用hasChild的返回值永远不会被使用:

(*it)->hasChild(_value);

这将解决您的问题,包括代码其余部分的任何问题

非常感谢,现在我看到了解决方案,非常简单。对于将来偶然发现这个问题的任何人来说,下面是代码的工作原理:我希望任何好的编译器都会发出警告,警告到达非void函数的末尾,而不会在问题的末尾发出任何返回信号。检查你的电脑是否有。
(*it)->hasChild(_value);