C++ 使用初始化创建指向新结构的共享指针

C++ 使用初始化创建指向新结构的共享指针,c++,struct,C++,Struct,在Mac上的Xcode中使用LLVM编译器libc++(GNU++11方言) 我有一个结构如下: struct Vertex { float position[3]; float colour[4]; float normal[3]; }; Vertex *vertex = new Vertex({{0.1f, 0.1f, 0.1f}, {0.0f, 0.0f, 0.0f, 0.0f},

在Mac上的Xcode中使用LLVM编译器libc++(GNU++11方言)

我有一个结构如下:

struct Vertex
{
    float position[3];
    float colour[4];
    float normal[3];
};
Vertex *vertex = new Vertex({{0.1f, 0.1f, 0.1f},
                            {0.0f, 0.0f, 0.0f, 0.0f},
                            {1.0f, 0.0f, 0.0f}} );
目前,我正在堆上创建一个实例,如下所示:

struct Vertex
{
    float position[3];
    float colour[4];
    float normal[3];
};
Vertex *vertex = new Vertex({{0.1f, 0.1f, 0.1f},
                            {0.0f, 0.0f, 0.0f, 0.0f},
                            {1.0f, 0.0f, 0.0f}} );
但是,我想创建一个共享指针。 下面的代码是最好的方法吗

Vertex v = Vertex( {{0.1f, 0.1f, 0.1f},
                    {0.0f, 0.0f, 0.0f, 0.0f},
                    {1.0f, 0.0f, 0.0f}} );

std::shared_ptr<Vertex> vertex = std::make_shared<Vertex>(v);
正如所建议的,但是我在第一个代码段(更新之前的代码段)中得到错误
没有匹配函数调用“make_shared”
std::make_shared
将为一个新的
向量
分配内存,并使用给定的参数
v
构造它,在本例中,复制构造。它会很好用的

第二个代码段(在更新中)不起作用,因为编译器无法推导出与参数匹配的正确类型。函数模板std::make_shared声明为:

template< class T, class... Args >
shared_ptr<T> make_shared( Args&&... args );
模板
共享\u ptr使\u共享(Args&…Args);
这个问题可以通过“转换”来解决

auto-vertex=std::共享(
顶点{0.1f,0.1f,0.1f},
{0.0f,0.0f,0.0f,0.0f},
{1.0f,0.0f,0.0f});

通常您只需将
PCNVertex*顶点
替换为
自动顶点2
新的PCNVertex(…)
std::使_共享(…)@NathanOliver我已经试过了,我得到了“错误:(140,19)没有匹配的函数来调用‘make_shared’”,你在用什么编译器,用什么选项来编译?是否打开了C++11?是否包括
?你的
PCNVertex
是什么?我已经更正了
PCNVertex
,我的意思是写
Vertex
,对不起。对不起,我意识到我从来没有接受过这个答案!好了,谢谢。