4

查看std:make_shared 与 std::shared_ptr的先前堆栈问题,我试图在 uni 项目中实现这一点。这是之前的“问题”:

我想不出任何情况

std::shared_ptr<Object> obj(new Object("foo", 1));

会更喜欢

auto obj = std::make_shared<Object>("foo", 1);

因此,我采用了以下代码:

std::shared_ptr<Triangle> pT1(new Triangle(pCanvas, 30, 30, 30, 60, 60, 30, 255, 0, 0));

并将其修改为以下代码:

auto pT1 = std::make_shared<Triangle>(pCanvas, 30, 30, 30, 60, 60, 30, 255, 0, 0);

但是,std::make_shared 带有红色下划线,当我将鼠标悬停在它上面时出现错误:“错误:没有重载函数的实例“std::make_shared”与参数列表匹配”

我的代码可以使用第一行代码正确编译和执行,但是如果我使用第二行代码,则会出现一些错误。

这些错误是:

`1>------ 构建开始:项目:SIT153Canvas,配置:Debug Win32 ------ 1> main.cpp

1>c:\users\steve\documents\visual studio 2012\projects\sit153canvas\main.cpp(54): 错误 C2780: 'std::shared_ptr<_Ty> std::make_shared(_V0_t &&,_V1_t &&,_V2_t && ,_V3_t &&,_V4_t &&)' :需要 5 个参数 - 提供 10 个

1> c:\program files (x86)\microsoft visual studio 11.0\vc\include\memory(972) : 见 'std::make_shared' 的声明

1>c:\users\steve\documents\visual studio 2012\projects\sit153canvas\main.cpp(54): 错误 C2780: 'std::shared_ptr<_Ty> std::make_shared(_V0_t &&,_V1_t &&,_V2_t && ,_V3_t &&)' : 需要 4 个参数 - 提供 10 个

1> c:\program files (x86)\microsoft visual studio 11.0\vc\include\memory(972) : 见 'std::make_shared' 的声明

1>c:\users\steve\documents\visual studio 2012\projects\sit153canvas\main.cpp(54): 错误 C2780: 'std::shared_ptr<_Ty> std::make_shared(_V0_t &&,_V1_t &&,_V2_t && )' : 需要 3 个参数 - 提供 10 个

1> c:\program files (x86)\microsoft visual studio 11.0\vc\include\memory(972) : 见 'std::make_shared' 的声明

1>c:\users\steve\documents\visual studio 2012\projects\sit153canvas\main.cpp(54): 错误 C2780: 'std::shared_ptr<_Ty> std::make_shared(_V0_t &&,_V1_t &&)' :需要 2 个参数 - 提供 10 个

1> c:\program files (x86)\microsoft visual studio 11.0\vc\include\memory(972) : 见 'std::make_shared' 的声明

1>c:\users\steve\documents\visual studio 2012\projects\sit153canvas\main.cpp(54): 错误 C2780: 'std::shared_ptr<_Ty> std::make_shared(_V0_t &&)' : 需要 1 个参数- 提供 10 个

1> c:\program files (x86)\microsoft visual studio 11.0\vc\include\memory(972) : 见 'std::make_shared' 的声明

1>c:\users\steve\documents\visual studio 2012\projects\sit153canvas\main.cpp(54): 错误 C2780: 'std::shared_ptr<_Ty> std::make_shared(void)' : 需要 0 个参数 -提供 10 个

1> c:\program files (x86)\microsoft visual studio 11.0\vc\include\memory(972) : 见 'std::make_shared' 的声明

根据错误, std::make_shared 似乎只期望最多 5 个参数。不幸的是,我搜索过的其他网站并没有说明这个问题。任何帮助,将不胜感激。

4

1 回答 1

6

VS2012 不完全支持可变参数模板。没有编译器支持 - 相反,它们是在库中模拟的,默认情况下最多 5 个参数。实际数量由宏决定_VARIADIC_MAX。在您的项目属性中将其定义为足够大的值。

于 2013-10-11T04:08:32.087 回答