Я пытаюсь найти решение, представленное в этой SO Q / A Ошибка компилятора при использовании shared_ptr с указателем на указатель , и я не могу использовать решение, предоставленное надлежащим образом.Я все еще получаю ошибки компиляции в Ubuntu 18.04 с g ++ версии 7.3
Вот мой минимальный полный проверяемый пример для воспроизведения проблемы
test.h
# include <memory>
using std::shared_ptr;
using std::unique_ptr;
struct DataNode
{
shared_ptr<DataNode> next;
} ;
struct ProxyNode
{
shared_ptr<DataNode> pointers[5];
} ;
struct _test_
{
shared_ptr<shared_ptr<ProxyNode>> flane_pointers;
};
test.cpp
#include <stdint.h>
#include "test.h"
shared_ptr<DataNode> newNode(uint64_t key);
shared_ptr<ProxyNode> newProxyNode(shared_ptr<DataNode> node);
struct _test_ test1;
int main(void)
{
test1.flane_pointers(nullptr);
shared_ptr<DataNode> node = newNode(1000);
}
shared_ptr<ProxyNode> newProxyNode(shared_ptr<DataNode> node) {
shared_ptr<ProxyNode> proxy(new ProxyNode());
return proxy;
}
shared_ptr<DataNode> newNode(uint64_t key) {
shared_ptr<DataNode> node(new DataNode());
return node;
}
Это ошибка, которую я получаю
test.cpp: In function ‘int main()’:
test.cpp:11:31: error: no match for call to ‘(std::shared_ptr<std::shared_ptr<ProxyNode> >) (std::nullptr_t)’
test1.flane_pointers(nullptr);
^
Что еще вы пробовали?
Я попытался инициализировать nullptr в заголовочном файле также
struct _test_
{
shared_ptr<shared_ptr<ProxyNode>> flane_pointers(nullptr);
};
Но это тоже не сработало.Где я иду не так?
Моя цель
Все, что я пытаюсь сделать, это следующее - я пытаюсь инициализировать flane_pointers, который является вектором указателей наnullptr.Объявление было сделано в заголовочном файле относительно его типа, и я пытаюсь инициализировать его в файле .cpp.При этом я получаю вышеупомянутые ошибки компиляции.
flane_pointers(nullptr)
UPDATE
Может ли какой-либо из ответов объяснить, была ли инициализация в этой ошибке компилятора прииспользование shared_ptr с указателем на указатель правильно или нет?
std::shared_ptr<std::shared_ptr<ProxyNode> > ptr2ptr2ProxyNode(nullptr);
Для меня (и я новичок в C ++) эта инициализация также выглядит как вызов функции.Это неправильно?