簡體   English   中英

使用cpp將節點插入二進制搜索樹

[英]Insert Node into a Binary Search Tree using cpp

我在嘗試將節點插入二進制搜索樹時遇到麻煩。 我不斷

錯誤LNK2019:無法解析的外部符號“ public:__thiscall tr​​ee :: tree(void)”(?? 0?$ tree @ H @@ QAE @ XZ)

有人可以告訴我問題是什么。

treenode.h

template <class T> class tree;

//treenode class-template definition
template <class T>
class treenode
{
friend class tree<T>;

public:

    treenode(const T &d, treenode<T> *l, treenode<T> *r)
        : data(d), leftptr(l), rightptr(r)
    {

    }

    treenode(const T &d):
        leftptr(0),
        data(d),
        rightptr(0)
    {

    }

    T getData() const
    {
        return data;
    }

private:
    treenode<T> *leftptr;
    T data;
    treenode<T> *rightptr;
};//end class treenode

class tree
{
public:
    tree(); //initializes the private data member

    void insertNode (treenode<T> **, const T &);
    void preOrderTraversal(treenode<T> * ) const;
    void postOrderTraversal(treenode<T> * ) const;
    void inorderTraversal(treenode<T> *) const;

private:
    treenode<T> *rootptr;
};

樹.cpp

#include <iostream>
#include "tree.h"
using namespace std;

//constructor
template< class T>
tree<T>::tree()
{
rootptr = 0; //indicate tree is initially empty
}//end tree constructor


//insert node in tree
template <class T>
void tree<T>::insertNode(treenode<T> **rootptr, const T &val)
{
// subtree is empty; create new treenode containing value
if(*rootptr == 0)
    *rootptr = new treenode<T>(val);
else // subtree is not empty
{
    // data to insert is less than data in current node
    if(val < (*rootptr)->data)
    {
        insertNode(&((*rootptr)->leftptr), val);
    }
    else
    {
        // data to insert is greater than data in current node
        if(val > (*rootptr)->data)
        {
            insertNode(&((*rootptr)->rightptr), val);
        }
    }//end else
}//end else
}//end function insertNode

測試器

int main()
{
   tree <int> create;
   int userVal;

   cout << "Enter 10 Integers" << "\n\n";
   for(int i=0; i<10; i++)
{
    cout << "-> ";
    cin >> userVal;
    createTree.insertNode(0, userVal);
    }

   system("pause");
   return 0;
}//end main

問題在於tree.h頭文件中未定義 tree的構造函數。 編譯器需要模板的完整定義才能實例化它。 現在,發生的事情是某個文件包含tree.h,編譯器看到了tree類的類定義,但找不到其構造函數的定義。

因此,您需要將tree.cpp文件中的所有內容移動到tree.h中。 (這不適用於普通的非模板類。)

實際上比這稍微復雜一點: 將C ++模板函數定義存儲在.CPP文件中

因此,只要將定義放入.cpp文件中,就可以避免使用,但前提是您明確要實例化要使用它的所有類型的模板。 最簡單的解決方案仍然是將整個定義放在頭文件中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM