如何修复BST模板类的对象初始化?

时间:2019-07-24 23:49:27

标签: c++ binary-search-tree

此问题发生在我的main.cpp中:

using namespace std;

#include <iostream>

#include "BST.h"
#include "Packet.h"

int main()
{
    BST test; // It occurs on this line!
    Packet one(1, "testPacket", 1, 1);

    system("Pause");
}

该行的错误表明:

  

缺少类模板“ BST”的参数列表

我不知道如何解决它。我只想初始化BST。如何解决此错误?我对模板不是很有经验。请帮忙。 我的首要任务是立即解决这个明显的问题。我可以寻求帮助吗?

供参考:

BST.h:

#ifndef BST_H
#define BST_H

using namespace std;

template <typename T>
class Node {
    public:
        Node() : rlink(nullptr), llink(nullptr) {}
        ~Node() {}
    private:
        T data;
        Node *rlink, *llink;

};

template <typename T>
class BST {
public:
    BST();
    void insert(T data);
private:
    Node * root; 
};

#endif

BST.cpp

#include "BST.h"

template <typename T>
BST<T>::BST() : root(nullptr) {}

template <typename T>
void BST<T>::insert(T data) {
    if (root != nullptr) {

    }
    else {
        cout << "NPTR" << endl;
    }
}

Packet.h

#ifndef PACKET_H
#define PACKET_H

#include <string>

using namespace std;

class Packet {
public:
    Packet(int partId, string description, double price, int partCount) :
        partId(partId), description(description), price(price), partCount(partCount) {}
    int getPartId() const { return partId; }
    string getDescription() const { return description; }
    double getPrice() const { return price; }
    int getPartCount() const { return partCount; }
private:
    int partId;
    string description;
    double price;
    int partCount;
};

#endif

1 个答案:

答案 0 :(得分:2)

有两个问题。

第一个是Node需要知道T是什么类型,因此您需要像这样使用Node时告诉它:

template <typename T>
class BST {
public:
    BST();
    void insert(T data);
private:
    Node<T> * root; 
};

第二,BST在尝试使用时需要知道它自己的类型T是什么,所以您需要这样做:

BST<int> test; // Or whatever you are searching for in your tree. Doesn't have to be an int

P.S。 you're probably going to need to implement BST in the header file,现在就开始吧。否则可能会导致链接器问题。


P.P.S。我一直在阅读您对原始帖子的评论,以及您实际上可能需要的评论:

BST<Packet> test; // Since you are searching for packets.