我通过"复制"创建新对象时遇到了问题。已经存在的同类型对象。
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
我做错了什么?
答案 0 :(得分:1)
如果您某处已经定义了赋值运算符,则可以使用
template<class dataType>
inline Node<dataType>::Node(const Node<dataType> & node)
{
*this = node;
}
重用其代码,不要重复自己。
*
表示解除引用this
指针。但是你的assign运算符必须考虑到它可以作为lvalue调用默认构造值。