复制构造函数中的模板

时间:2015-11-02 12:27:51

标签: c++ templates

你能否告诉我为什么我收到编译错误

template<class T> class 'Node' used without template parameters

使用以下代码

template<class T>
    class Node
    {
        private:
            T _value;
            vector<Node*> children;

        public:
            Node(T value);
            Node<T>(const Node<T>& node);
            void AddChild(Node<T>* node);
            T getValue();
            vector<Node<T>*> returnChildren();
            ~Node();
    };

    template <class T>
    Node::Node<T>(T value):_value(value)
    {
    }

3 个答案:

答案 0 :(得分:1)

template <class T>
Node<T>::Node(T value):_value(value)
{
}

试试这个。

答案 1 :(得分:0)

当你写

Node::Node<T>(T value):_value(value)

类上没有模板参数(该行上的第一个Node),而是在构造函数上有一个(第二个Node)。这是不正确的。

答案 2 :(得分:0)

在您的情况下,Node是模板类。使用该类时,必须将其与模板参数一起使用。这不起作用:

template <class T>
Node::Node(T value):_value(value)
{
}

因为类Node是模板化的,所以您在没有模板参数的情况下使用它。

这不起作用,因为你把模板参数放在函数(这里是构造函数)而不是类。

template <class T>
Node::Node<T>(T value):_value(value)
{
}

这确实有效。

template <class T>
Node<T>::Node(T value):_value(value)
{
}

您只对该类使用此语法,它在您编写函数时会有所不同。

功能。
我们说我们有这个课程

class MyTemplate
{
    template<typename T>
    void foo(T val);
};

您可以像这样定义方法:

template<typename T>
void MyTemplate::foo<T>(T val)
{

};

但它失败了。 Clang打印出这个错误:

  

不允许使用功能模板部分特化

对于你不需要它的功能,你必须写

template<typename T>
void MyTemplate::foo(T val)
{
}

如果你想专攻它,你可以写

template<>
void MyTemplate::foo(int val)
{
}

template<>
void MyTemplate::foo<int>(int val)
{
}

声明:

当您声明Node类型的变量时,您也必须使用模板参数。

Node<int> myNode(12);