此问题发生在我的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
答案 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.