@Armyashka

Как передать массив в конструктор класса?

Мне нужно считать элементы массива в конструкторе класса SegmentTree, следовательно необходимо как-то передать туда массив.
Код ниже выводит ошибку Types 'SegmentTree' and 'SegmentTree *' are not compatible
Что мне нужно сделать, чтобы все сработало?

#include <iostream>
#include <queue>
#include <algorithm>

using namespace std;

class SegmentTree{
private:
    int tree[];

public:
    SegmentTree(int array[], int length){
        int size = (1 << (int(ceil(log2(length))) + 1)) - 1;
        tree = new int[size];
    }
};
int main(int argc, const char * argv[]) {
    // insert code here...
    int n;
    cin >> n;

    int a[n];
    for (int i = 0; i < n; ++i) cin >> a[i];

    SegmentTree tree = new SegmentTree(a, n);
}
  • Вопрос задан
  • 55 просмотров
Решения вопроса 1
wataru
@wataru Куратор тега C++
Разработчик на С++, гуглер, экс-олимпиадник.
Читайте ошибку внимательно. Дело не в массиве.

Вместо SegmentTree tree = new SegmentTree(a, n);
надо
SegmentTree tree(a, n); или SegmentTree *tree = new SegmentTree(a, n);

new - создает указатель. Инициализировать им нужно, соответственно, указатель.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
В с++ используйте std::vector в качестве динамического массива.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы