constructor for 'MajorityChecker' must explicitly initialize the member 'tree' which does not have a default constructor
时间: 2023-12-25 12:04:16 浏览: 148
setter-on-constructor-prototype.rar_The Next
这个错误提示是因为在定义类`MajorityChecker`时,它有一个成员变量`tree`,但是这个成员变量没有默认构造函数,也就是说如果不显式地初始化它,就会出现这个错误。
解决这个问题的方法是在`MajorityChecker`的构造函数中显式地初始化`tree`。如果`tree`是一个指针类型,可以使用`new`运算符为它分配内存,并在构造函数中初始化它。例如:
```c++
class MajorityChecker {
public:
MajorityChecker(vector<int>& arr) {
// 为tree分配内存,并将其初始化为NULL
tree = new SegmentTree(0, arr.size()-1, arr);
}
// ...
private:
SegmentTree* tree; // tree是一个指向SegmentTree的指针类型的成员变量
};
```
如果`tree`是一个对象类型,则可以在构造函数的成员初始化列表中初始化它,例如:
```c++
class MajorityChecker {
public:
MajorityChecker(vector<int>& arr) : tree(0, arr.size()-1, arr) {
// ...
}
// ...
private:
SegmentTree tree; // tree是一个SegmentTree对象类型的成员变量
};
```
在上述代码中,`tree`的初始化使用了SegmentTree类的构造函数,并传递了参数0、arr.size()-1、arr,以便初始化tree成员变量。
阅读全文