C++ C++;在构造函数中初始化自定义类型
我有以下代码:C++ C++;在构造函数中初始化自定义类型,c++,C++,我有以下代码: class SegmentTree { public: unordered_map<int, int> tree; vector<int> nums; SegmentTree(vector<int> nums) { this->nums = nums; build(0, nums.size() - 1, 1); } }; class NumArray { public:
class SegmentTree {
public:
unordered_map<int, int> tree;
vector<int> nums;
SegmentTree(vector<int> nums) {
this->nums = nums;
build(0, nums.size() - 1, 1);
}
};
class NumArray {
public:
SegmentTree s;
NumArray(vector<int> nums) {
s = SegmentTree(nums);
}
};
类分段树{
公众:
无序映射树;
向量nums;
分段树(向量nums){
这->nums=nums;
构建(0,nums.size()-1,1);
}
};
努马拉级{
公众:
树木节段;
Numaray(矢量nums){
s=分段树(nums);
}
};
我听到一个错误,说
注意:候选者需要1个参数,提供0个参数
当我执行SegmentTree s
时,可能正在初始化SegmentTree
但是,我只想在NumArray
的构造函数中初始化它
如何实现这一点?您需要使用初始化器列表
numaray(向量nums):s(nums){
}
分配与初始化不同。您的版本尝试默认初始化
s
,然后才分配给它。但是,因为您的分段树类没有默认构造函数,所以此操作失败。this->nums=nums代码>使用构造函数初始化列表初始化对象时,不要使用构造函数体赋值:<代码> SegmentTree(vector NUs):NUMS(NUX){< /COD> >。您可以考虑将您的参数命名为与成员变量不同(个人总是使用<代码> My前缀为成员)减少混淆,避免阴影问题。
NumArray(vector<int> nums) : s(nums) {
}