2011-11-24 97 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的參考是正確的。 –

相關問題