模板化类const限定符构造函数

时间:2017-01-16 11:35:25

标签: c++ class templates binary-tree

我通过"复制"创建新对象时遇到了问题。已经存在的同类型对象。

template<class dataType>
inline Node<dataType>::Node(const Node<dataType> & node)
{
    if (this != nullptr)
    {
        this->mData = node.getData();
        this->mLeft = node.getLeft();
        this->mRight = node.getRight();
    }
}

我应该使用上述吗?或者我应该这样做:

template<class dataType>
    inline Node<dataType>::Node(const Node<dataType> & node)
    {
        this = node;
    }

后者产生下一个错误:

1>h:\projects\binary search trees\data\classes\node.h(51): error C2440: '=': cannot convert from 'const Node<float> *' to 'Node<float> *const '
1>  h:\projects\binary search trees\data\classes\node.h(51): note: Conversion loses qualifiers

前者抱怨类似的东西:

1>h:\projects\binary search trees\data\classes\node.h(51): error C2662: 'float Node<float>::getData(void)': cannot convert 'this' pointer from 'const Node<float>' to 'Node<float> &'
1>  h:\projects\binary search trees\data\classes\node.h(51): note: Conversion loses qualifiers

我做错了什么?

1 个答案:

答案 0 :(得分:1)

如果您某处已经定义了赋值运算符,则可以使用

template<class dataType>
    inline Node<dataType>::Node(const Node<dataType> & node)
    {
        *this = node;
    }

重用其代码,不要重复自己。 *表示解除引用this指针。但是你的assign运算符必须考虑到它可以作为lvalue调用默认构造值。