错误:没有重载函数"std :: make_shared"的实例与参数列表匹配

Ste*_*n C 4 c++ shared-ptr make-shared c++11 visual-studio-2012

看一下之前的堆栈问题 std:make_shared vs 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));
Run Code Online (Sandbox Code Playgroud)

并将其修改为此代码:

auto pT1 = std::make_shared<Triangle>(pCanvas, 30, 30, 30, 60, 60, 30, 255, 0, 0);
Run Code Online (Sandbox Code Playgroud)

但是,std :: make_shared以红色下划线,当我鼠标悬停时,我得到错误:"错误:没有重载函数的实例"std :: make_shared"匹配参数列表"

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

这些错误是:

`1> ------ Build build:Project: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个参数.不幸的是,我搜索过的其他网站并未对此问题有所了解.任何帮助,将不胜感激.

Igo*_*nik 6

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