Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/148.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;在构造函数中初始化自定义类型_C++ - Fatal编程技术网

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) {
}