2013-03-25 64 views
2

以下代码在VS2010中给出了一个编译错误,它支持shared_ptr和make_shared函数。为什么以及如何纠正?给出共享指针参数的默认值

#include <memory> 

class A 
{ 
    A(std::shared_ptr<int> p = std::make_shared<int>()) // error is at this line 
    {} 
}; 

它显示“make_shared”不是“全局命名空间”的成员。

+1

如果单 ':' 是一个错字,那么什么是错用VC++。铿锵编译它。 – cubuspl42 2013-03-25 18:53:11

+0

'ideone'也编译它(在C++ 11模式下) – maverik 2013-03-25 19:01:17

+1

看起来确实像一个bug。查看链接的答案 – 2013-03-25 19:03:24

回答

0

试试这个:

#include <memory> 

class A 
{ 
    //A(std::shared_ptr<int> p = std::make_shared<int>()) 

    A() 
    {std::shared_ptr<int> p = std::make_shared<int>();} 
}; 
+0

这很好。可能是VC++中的一个错误。 – user1899020 2013-03-25 18:59:04

+1

“这工作得很好” - 不太可能。它可以编译,但它与原始代码完全不同(其中'p'是构造函数的*参数*)。 – us2012 2013-03-25 19:03:45

+1

@ us2012是的,它们是不同的。我的意思是这帮助我确认它是一个编译器错误。 – user1899020 2013-03-25 19:55:02