2014-12-03 18 views
-2

我有一个由两个参数组成的二叉搜索树。我需要在树中实现广度优先的所有内容列表,而当我认为我明白我需要写什么时,我在语法上遇到了一些麻烦。语法问题:尝试将节点推入队列

#include <queue> 

template <class T> class Node {}; 

template <class T> class Tree 
{ 
    Node<T> *root; 

    void foo() 
    { 
    std::queue<Node<T> > myqueue; 
    myqueue.push(root<T>); // error here 
    } 
}; 
+0

注意,可进一步提高的问题,这将是相关解释什么错误实际上是(即说,它不会编译,然后复制粘贴编译器错误)。 – Boris 2014-12-03 09:14:39

回答

0

在你的代码,会员rootNode<T> *类型。但是您的队列myqueue包含Node<T>类型的元素。试试这个:

std::queue<Node<T> *> myqueue;  // note the different type here 
myqueue.push(root); 
+0

@Mock乐意提供帮助:-)注意:不要太在意你的问题上的“搁置”。但是,如果您想在将来避免这种情况,请尝试按照建议创建最小示例(http://stackoverflow.com/help/mcve)。这不仅对我们来说更容易帮助,而且通过这个过程很可能你会自己找到你的问题的答案,而且你会更有效地学习。 – Boris 2014-12-03 08:15:20

+0

注意,谢谢。我知道这段代码量有些过分,但不断询问以前的问题,并被告知要包含更多的代码:P – Mock 2014-12-03 08:20:03

+0

@Mock事情是,发布的代码必须是*最小*和*完整*。这非常重要。通过“最小化”,我们不希望您仅发布代码的相关部分。相反,您必须尝试创建一个全新的项目,尽可能使用尽可能少的代码行,但是会出现同样的问题(并且发布了这个最小的完整示例)。这不仅仅是为了SO,这正是好程序员每次遇到他们不明白的奇怪行为时所做的。这是一项重要的学习技能。见:http://ericlippert.com/2014/03/05/how-to-debug-small-programs/ – Boris 2014-12-03 08:44:18