2016-10-01 7 views
0

Обычно я бы определить новый массив и вектор с размером п в 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), поэтому, я думаю, все, что я сделал, было объявлено новым, локальным вектором, чего я не хотел.

Итак, как я должен определять векторы классов при использовании файла заголовка?

+0

Опубликовать реальный код. В любом месте нет 'yArray'. –

+1

Кажется, у вас есть код в конструкторе 'Maze' (вы можете показать свою фактическую реализацию). Если да, просмотрите списки инициализаторов участников. –

+0

Пожалуйста, разместите свой конструктор 'Maze'. – PaulMcKenzie

ответ

1

Возможно, что вы ищете std::vector::reserve. Обратите внимание, что вам все равно необходимо добавить push_back элементов в векторе после сохранения резерва. Он только гарантирует, что capacity достаточно для хранения запрошенного количества элементов.

Или, альтернативно, вы можете создать новый вектор в своем конструкторе и скопировать его в элемент.

vector<int> temp_vec(n); 
yVector = temp_vec; 
Смежные вопросы