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