2011-11-24 149 views
1

我有一个包含多个公共和私有成员函数的Binary-Tree类模板。当成员函数都在类模板中定义和实现时,它会按预期方式正确编译和运行。但是,当我将这些函数移到主类模板之外时,我会得到一个多重性错误类模板的外部成员函数

有什么我在这里失踪?

template <class type> 
class BinaryTree{ 
private: 
    Node<type>* root; 
    void internalTraverse(Node<type>* n){} 
    ...... 
public: 
    ...... 
}; 

template <class type> 
void BinaryTree<type>::internalTraverse(Node<type>* n){ 
    if (n == NULL){ 
     return; 
    } 
    internalTraverse(n->left);   // <- This declaration has no storage type or identifier 
    cout << "Node: " << n->data << endl;// Ditto 
    internalTraverse(n->right);   // Ditto 
}; 
...... 

完整披露:这是家庭作业的一部分。然而,它与作业的目的没有直接关系 - 更多的是切向问题

+2

我想改变'无效internalTraverse(节点 * N){}''到无效internalTraverse(节点 * N);'可以解决这个问题。多数民众赞成在我看到的代码时得到的.. – Ajai

+0

@Ajai这样做了。 +1先生 –

回答

3

定义成员函数内联和外联,所以这是多个。以下编译:

#include <iostream> 

template <typename> class Node; 

template <class type> 
class BinaryTree{ 
private: 
    Node<type>* root; 
    void internalTraverse(Node<type>* n); // <--- no definition! 
}; 

template <class type> 
void BinaryTree<type>::internalTraverse(Node<type>* n){ 
    if (n == NULL){ 
    return; 
    } 
    internalTraverse(n->left);identifier 
    std::cout << "Node: " << n->data << std::endl; 
    internalTraverse(n->right); 
} 
+0

+1啊,这是小事情不是吗?非常感谢。优秀的捕获。未花费数小时追逐“{}”。很明显,msdn的参考是正确的。 –