Есть класс, в котором есть поле вектора из unique_ptr (Animals
- тоже класс), а так же методы чтения и записи в файл этого вектора класса. Вот фрагмент кода:
class Hendler {
private:
char* input;
char* output;
std::vector <std::unique_ptr <ModelObject>> * Animals;
std::vector <std::unique_ptr <Event>> * E;
public:
Hendler(char* in, char* out, std::vector <std::unique_ptr <ModelObject> > * A, std::vector <std::unique_ptr <Event> > * Ev) :
input(in), output(out), Animals(A), E(Ev) {};
void inputing()
{
std::fstream inputFile;
inputFile.open(input);
coord p, v;
std::vector <std::unique_ptr <ModelObject> > Animals;
// some code
for (int i = 1; i <= D; i++)
{
inputFile >> p.x >> p.y >> p.z >> v.x >> v.y >> v.z;
Animals.emplace_back(new Dragonfly(p, v, DS));
}
inputFile.close();
}
void outputing()
{
//some code
for (int i = 0; i < Animals->size(); ++i) {
switch ((*Animals)[i]->get_type()) {
case dragonfly:
out << (*Animals)[i]->get_position().x
<< ' ' << (*Animals)[i]->get_position().y
<< ' ' << (*Animals)[i]->get_position().z
<< ' ' << (*Animals)[i]->get_vector().x
<< ' '
<< (*Animals)[i]->get_vector().y << ' '
<< (*Animals)[i]->get_vector().z << ' '
<< '\n';
break;
//some code
};
int main(int argc, char ** argv)
{
std::vector <std::unique_ptr <ModelObject>> Animals;
std::vector <std::unique_ptr <Event> > Events;
Hendler HendlerFile(argv[1],argv[2], &Animals, &Events);
HendlerFile.inputing();
//Model Mod(&Animals, &Events);
//HendlerFile.set_N(Mod.modulating(HendlerFile.get_N()));
HendlerFile.outputing();
return 0;
}
Но после выполнения мейна, выходной файл пруст... Понимаю, что передача в класс Handler
вектора происходит не правильно, но как правильно это сделать - ума не приложу.. З.Ы. меняться должен именно вектор из main
.
Данное объявление вектора в функции-члене класса inputing
void inputing()
{
std::fstream inputFile;
inputFile.open(input);
coord p, v;
std::vector <std::unique_ptr <ModelObject> > Animals;
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
является объявлением локальной переменной, для которой будет вызван деструктор при завершении работы функции. Член данных Animals
самого класса, объявленный как
std::vector <std::unique_ptr <ModelObject>> * Animals;
при этом никак не изменяется.
Кроме того совершенно непонятно, почему вы объявили этот член данных как указатель на вектор вместо самого объекта вектора.
В функции inputting у вас содается локальный vector, в который сохраняются измененния, а после выхода из функции он разрушается.
Виртуальный выделенный сервер (VDS) становится отличным выбором
У меня никак не получается остановить работу демона, что я и пытаюсь сделать с помощью параметра stopПодскажите, как лучше это сделать? И почему...
Здравствуйте! Пишу простой проводник и столкнулся с такой библиотекойВопрос такой: для написания проводника ею лучше пользоваться? И для...
Я вывожу значение постоянно обновляемой переменной в терминал в виде:
Во время первого запуска программы, количество автобусных остановок – 234, но я хочу затем поменять и посмотреть, как программа все посчитает