我试图使一个类,其中包括std::pair
容器,见下面的代码。
- 为什么编译器声明类方法已删除?
- 如何解决此问题?
template <typename Kty_, typename Dty_>
class TreeNode {
public:
// tags:
using usI = unsigned short int;
using value_type = std::pair<const Kty_, Dty_>;
using pointer = value_type*;
using reference = value_type&;
using const_reference = const value_type&;
TreeNode(
const_reference pairValue,
usI height = 0,
TreeNode<const Kty_, Dty_> *parent = nullptr,
TreeNode<const Kty_, Dty_> *left = nullptr,
TreeNode<const Kty_, Dty_> *right = nullptr
) {
left_ = left;
parent_ = parent;
right_ = right;
pairValue_ = pairValue; // 48 // Overload resolution selected deleted operator '=' clang:ovl_deleted_oper
height_ = height;
}
protected:
TreeNode<const Kty_, Dty_> *left_;
TreeNode<const Kty_, Dty_> *parent_;
TreeNode<const Kty_, Dty_> *right_;
value_type pairValue_;
usI height_;
};
- 有一组examples调用此问题:
- 示例:未初始化的数据成员:* 它对我不起作用,因为我不知道如何用默认值初始化
Kty_
&Dty_
- 示例:未初始化的数据成员:* 它对我不起作用,因为我不知道如何用默认值初始化
- 示例:引用和常量数据成员:* 我已尝试删除某些
const
关键字指定,但没有帮助
- 示例:引用和常量数据成员:* 我已尝试删除某些
- 示例:Movable删除隐式副本:* 我认为不是我的情况
- 示例:删除的间接基成员:* 我认为不是我的情况
- 示例:变量和volatile成员:* 我认为不是我的情况
1条答案
按热度按时间5uzkadbs1#
为什么编译器声明一个类方法被删除了?
由于无法向
const
成员赋值,因此value_type pairValue_;
包含常量成员。如何解决此问题?
正确初始化
const
成员。不能在构造函数体中赋值给常量成员,这是你正在做的,只是将“初始化”(或者更确切地说是所有的)移到初始化列表中。