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

时间:2013-10-11 04:03:37

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

查看std:make_shared与std :: shared_ptr的A previous stack Question,我试图在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用红色加下划线,当我鼠标悬停时,我得到错误:  &#34;错误:没有重载函数的实例&#34; std :: make_shared&#34;匹配参数列表&#34;

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

这些错误是:

`1&gt; ------ Build build:Project:SIT153Canvas,配置:Debug Win32 ------ 1 GT; main.cpp中

1&gt; c:\ users \ steve \ documents \ visual studio 2012 \ projects \ sit153canvas \ main.cpp(54):错误C2780:&#39; std :: shared_ptr&lt; _Ty&gt; std :: make_shared(_V0_t&amp;&amp;,_ V1_t&amp;&amp;,_ V2_t&amp;&amp;,_ V3_t&amp;&amp;,_ V4_t&amp;&amp;)&#39; :预计有5个参数 - 提供10个

1&GT; c:\ program files(x86)\ microsoft visual studio 11.0 \ vc \ include \ memory(972):参见&#39; std :: make_shared&#39;

的声明

1&gt; c:\ users \ steve \ documents \ visual studio 2012 \ projects \ sit153canvas \ main.cpp(54):错误C2780:&#39; std :: shared_ptr&lt; _Ty&gt; std :: make_shared(_V0_t&amp;&amp;,_ V1_t&amp;&amp;,_ V2_t&amp;&amp;,_ V3_t&amp;&amp;)&#39; :预计有4个参数 - 提供10个

1&GT; c:\ program files(x86)\ microsoft visual studio 11.0 \ vc \ include \ memory(972):参见&#39; std :: make_shared&#39;

的声明

1&gt; c:\ users \ steve \ documents \ visual studio 2012 \ projects \ sit153canvas \ main.cpp(54):错误C2780:&#39; std :: shared_ptr&lt; _Ty&gt; std :: make_shared(_V0_t&amp;&amp;,_ V1_t&amp;&amp;,_ V2_t&amp;&amp;)&#39; :预计有3个参数 - 提供10个

1&GT; c:\ program files(x86)\ microsoft visual studio 11.0 \ vc \ include \ memory(972):参见&#39; std :: make_shared&#39;

的声明

1&gt; c:\ users \ steve \ documents \ visual studio 2012 \ projects \ sit153canvas \ main.cpp(54):错误C2780:&#39; std :: shared_ptr&lt; _Ty&gt; std :: make_shared(_V0_t&amp;&amp;,_ V1_t&amp;&amp;)&#39; :期望2个参数 - 提供10个

1&GT; c:\ program files(x86)\ microsoft visual studio 11.0 \ vc \ include \ memory(972):参见&#39; std :: make_shared&#39;

的声明

1&gt; c:\ users \ steve \ documents \ visual studio 2012 \ projects \ sit153canvas \ main.cpp(54):错误C2780:&#39; std :: shared_ptr&lt; _Ty&gt; std :: make_shared(_V0_t&amp;&amp;)&#39; :期望1个参数 - 提供10个

1&GT; c:\ program files(x86)\ microsoft visual studio 11.0 \ vc \ include \ memory(972):参见&#39; std :: make_shared&#39;

的声明

1&gt; c:\ users \ steve \ documents \ visual studio 2012 \ projects \ sit153canvas \ main.cpp(54):错误C2780:&#39; std :: shared_ptr&lt; _Ty&gt;的std :: make_shared(无效)&#39; :期望0个参数 - 提供10个

1&GT; c:\ program files(x86)\ microsoft visual studio 11.0 \ vc \ include \ memory(972):参见&#39; std :: make_shared&#39;

的声明

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

1 个答案:

答案 0 :(得分:6)

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