c ++ std :: vector "this" было "nullptr" - PullRequest
0 голосов
/ 28 января 2019

по какой-то причине я не могу использовать вектор _vec в datacenter.cpp.Там написано: " this " было "nullptr"

, пожалуйста, помогите, спасибо <3 </p>

datacenter.h

#pragma once
#include <iostream>
#include <vector>

class datacenter
{
public:
    datacenter();
    ~datacenter();

    void get_elements();

    std::vector<float> _vec;
};

datacenter.cpp

#include "datacenter.h"

datacenter::datacenter(){}

void datacenter::get_elements()
{
if (_vec.empty()) { //<---- the error appears here
    std::cout << "empty" << std::endl;
    }
}

datacenter::~datacenter(){}

main.cpp

#include <iostream>
#include <vector>
#include "datacenter.h"

class datacenter;

int main()
{
std::unique_ptr<datacenter> dc;
dc->get_elements();
}

Ответы [ 3 ]

0 голосов
/ 28 января 2019

A std::unique_ptr - это контейнер объекта, содержащийся объект должен быть инициализирован, как если бы это был неумный указатель, он не создается автоматически с помощью черной магии.

То, что вы делаете, примерноэквивалентно

datacenter* dc = nullptr;
dc->get_elements();

Сначала вам нужно определить объект:

auto dc = std::make_unique<datacenter>();

Имейте в виду, что вам повезло, что вы использовали std::unique_ptr, потому что неинициализированная переменная содержала бы мусорзначение (вместо nullptr), затрудняющее отладку в реальном примере.

0 голосов
/ 28 января 2019

Ваш уникальный указатель не инициализирован, и его содержимое равно нулю.Вы должны инициализировать его следующим образом:

std::unique_ptr<datacenter> dc = std::unique_ptr<datacenter>(new datacenter());

http://coliru.stacked -crooked.com / a / b54fa5fc05396e65

0 голосов
/ 28 января 2019

Проблема возникает из:

std::unique_ptr<datacenter> dc;

Это не создает экземпляр datacenter, а только (нулевой) (умный) указатель на него.Вам необходимо создать экземпляр с:

auto dc = std::make_unique<datacenter>();

См. Также

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...