Обычно я бы определить новый массив и вектор с размером п в C++, как это:Как объявить вектор в заголовке, а затем выделить его
int* xArray = new int[n];
vector<int> yVector(n);
Но теперь у меня есть класс Maze, который имеет заголовок. Предполагается, что массивы и векторы объявлены в заголовке, а затем выделены в f.ex. конструктор.
Массивы объявлены в Maze.h так:
class Maze {
public:
int* xArray;
}
И затем выделяется в Maze.cpp так:
xArray = new int[n];
Теперь я могу использовать xArray из любой функции в классе Лабиринт.
Но каков эквивалентный способ объявления и выделения векторов? Это то, что я пробовал:
В Maze.h:
class Maze {
public:
vector<int> yVector;
}
В Maze.cpp:
yVector(n);
Но при компиляции я получаю:
error: no match for call to ‘(std::vector<int>) (int)’
yVector(n);
Так это делает что yVector является функцией и что я пытаюсь вызвать функцию? Я попытался указать, что это поле класса, вместо этого записав this->yVector(n);
, но это не имело никакого значения.
Далее я попытался поставить vector<int> yVector(n);
в конструктор. Он компилируется. Но когда я позже попытаюсь использовать yVector[0]
в другой функции, я получаю Segmentation fault (core dumped)
, поэтому, я думаю, все, что я сделал, было объявлено новым, локальным вектором, чего я не хотел.
Итак, как я должен определять векторы классов при использовании файла заголовка?
Опубликовать реальный код. В любом месте нет 'yArray'. –
Кажется, у вас есть код в конструкторе 'Maze' (вы можете показать свою фактическую реализацию). Если да, просмотрите списки инициализаторов участников. –
Пожалуйста, разместите свой конструктор 'Maze'. – PaulMcKenzie