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个参数.不幸的是,我搜索过的其他网站并未对此问题有所了解.任何帮助,将不胜感激.
VS2012不完全支持可变参数模板.没有编译器支持 - 相反,它们在库中模拟,默认情况下最多5个参数.实际数量由宏确定_VARIADIC_MAX
.在项目属性中将其定义为足够大的值.