由于某种原因,我无法在datacenter.cpp中使用向量_vec。它说“ 这个”是“ nullptr”
请帮助,谢谢<3
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();
}
答案 0 :(得分:9)
麻烦来自:
std::unique_ptr<datacenter> dc;
这不会创建datacenter
的实例,而只会创建指向该实例的(空)(智能)指针。您需要使用以下内容创建实例:
auto dc = std::make_unique<datacenter>();
答案 1 :(得分:4)
std::unique_ptr
是一个对象的容器,所包含的对象必须像是非智能指针一样被初始化,并且不会自动用黑魔法构造。
您所做的大致等于
datacenter* dc = nullptr;
dc->get_elements();
您需要先对对象进行验证:
auto dc = std::make_unique<datacenter>();
请记住,您很幸运地使用了std::unique_ptr
,因为未初始化的变量本应包含垃圾值(而不是nullptr
),在实际示例中使调试更加困难。
答案 2 :(得分:-1)
您的唯一指针未初始化,并且其内容为null。 您应该以这种方式初始化它:
std::unique_ptr<datacenter> dc = std::unique_ptr<datacenter>(new datacenter());