为什么我不能为不同的类使用相同的模板?

时间:2017-07-14 06:17:35

标签: c++ shared-ptr

我有这个代码,我试图在两个不同的类中使用相同的模板。当我编译时,我收到错误:

#include <iostream>
#include <memory>

template <class T>
class Node

{
    public:
    int value;
    std::shared_ptr<Node> leftPtr;
    std::shared_ptr<Node> rightPtr;
    Node(int val) : value(val) {
         std::cout<<"Contructor"<<std::endl;
    }
    ~Node() {
         std::cout<<"Destructor"<<std::endl;
    }
};

template <class T>
class BST {

    private:
        std::shared_ptr<Node<T>> root;

    public:
        void set_value(T val){

            root->value = val;
        }
        void print_value(){
            std::cout << "Value: " << root.value << "\n";
        }
};

int main(){

    class BST t;
    t.set_value(10);
    t.print_value();

    return 1;
}

错误:

g++ -o p binary_tree_shared_pointers.cpp --std=c++14
binary_tree_shared_pointers.cpp:39:8: error: elaborated type refers to a template
        class BST t;
              ^
binary_tree_shared_pointers.cpp:21:7: note: declared here
class BST {
      ^

1 个答案:

答案 0 :(得分:5)

您尚未指定BST的类型。 除非您相应地指定模板,否则模板是不完整的类型。另一种选择是编译器可以某种方式推断出类型。 否则它是一个不完整的类型 - 因此你有一个错误。

如果你想创建一个int类型的树,例如它应该是:

BST<int> t;
t.set_value(10);
t.print_value();

请注意,您不需要使用class关键字来声明t