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

4

看过了 之前的一个栈问题 关于 std:make_shared 和 std::shared_ptr,我已经试图在一个学校项目中实现它。这是之前的“问题”:

我想不出任何情况下

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”的声明
根据错误提示,std::make_shared似乎只期望最多5个参数。 我搜索的其他网站不幸地没有解决问题。 任何帮助将不胜感激。
1个回答

6

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


感谢您的迅速回复,@Igor;那绝对是我在寻找的答案! - Steven C
1
+1,请注意在VS2012中,“足够大的值”不能大于10。 - Shmil The Cat

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接