二进制搜索树无法编译

我正在尝试创建一个使用模板的二叉搜索树结构。但是,当我尝试编译时出现错误。我不明白为什么我会得到“未定义的引用”,因为BSTree具有定义的功能BSTree()。​​

TreeHashTableDemo.o:TreeHashTableDemo.cpp:(.text+0x21): undefined reference to `BSTree<MechPart>::BSTree()'
    TreeHashTableDemo.o:TreeHashTableDemo.cpp:(.text+0x21): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `BSTree<MechPart>::BSTree()'
    TreeHashTableDemo.o:TreeHashTableDemo.cpp:(.text+0x1d0): undefined reference to `BSTree<MechPart>::add(MechPart&)'

作为C ++的新手,我没有这种类型的编译器错误的经验,因为我的代码始终可以正常编译 我的代码:

TreeHashTableDemo.cpp

#include <iostream>
#include <cstdlib>
#include <fstream>
#include <time.h>
#include <sstream> 
#include "BSTree.h"
#include "MechPart.h"
using namespace std;

int main()
{
    BSTree<MechPart> treeValues;
    MechPart part;
    cout << "The program has finished." << endl;
    return 0;
}

BSTree.h

#ifndef BSTREE_H
#define BSTREE_H
#include <cstdlib>
#include <iostream>
#include "BTNode.h"

template <typename Item>
class BSTree{
    public:
    BSTree();
    BSTree(Item& data);
    ~BSTree();
    void add(Item& data);
    std::size_t size();
    Item root() const;
    private:
    BTNode<Item>* root_;
    std::size_t nodes;
};
#endif

BSTree.cpp

#include <cassert> 
#include "BSTree.h"
template <typename Item>
BSTree<Item>::BSTree()
{
    root_ = NULL;
    nodes = 0;
}
template <typename Item>
BSTree<Item>::BSTree(Item& data)
{
    root_ = new BTNode<Item>(data);
    nodes = 1;
}
template <typename Item>
BSTree<Item>::add(Item& data)
{
    root_ = new BTNode<Item>(data);
    nodes = 1;
}

BTNode.h

#ifndef BTNODE_H
#define BTNODE_H
#include <cstdlib>
template <typename Item>
class BTNode
{
    public:
    BTNode(const Item& init_data = Item(),BTNode* init_left = NULL,BTNode* init_right = NULL)
    {
        data = init_data;
        left = init_left;
        right = init_right;
    }
    void set_data(const Item& new_data)     {data = new_data;}
    void set_left (BTNode* left_child)      {left = left_child;}
    void set_right(BTNode* right_child)     {right = right_child;}
    Item get_data() const           {return data;}
    Item& get_data()                {return data;}
    const BTNode* get_left() const  {return left;}
    BTNode* get_left()              {return left;}
    const BTNode* get_right() const {return right;}
    BTNode* get_right()             {return right;}
    bool is_leaf() const {return (left == NULL) && (right == NULL);} //if it is the last one then its children will return NULL 
    private:
    Item data;
    BTNode* left;
    BTNode* right;  
};
#endif
ahuo1987 回答:二进制搜索树无法编译

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3146749.html

大家都在问