【问题标题】:Error: no instance of overloaded function "std::make_shared" matches the argument list错误:没有重载函数“std::make_shared”的实例与参数列表匹配
【发布时间】:2013-10-19 01:22:04
【问题描述】:

查看A previous stack Question 的 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,配置:调试 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 个参数。 不幸的是,我搜索过的其他网站并没有说明这个问题。 任何帮助将不胜感激。

【问题讨论】:

    标签: c++ visual-studio-2012 c++11 shared-ptr make-shared


    【解决方案1】:

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

    【讨论】:

    • 感谢@Igor 的快速回复;这绝对是我一直在寻找的答案!
    • +1 ,还要注意VS2012下“足够大的值”不能大于10
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-12
    • 2014-12-27
    • 1970-01-01
    • 2023-03-10
    • 1970-01-01
    相关资源
    最近更新 更多