以下代码在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”不是“全局命名空间”的成员。
以下代码在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”不是“全局命名空间”的成员。
试试这个:
#include <memory>
class A
{
//A(std::shared_ptr<int> p = std::make_shared<int>())
A()
{std::shared_ptr<int> p = std::make_shared<int>();}
};
这很好。可能是VC++中的一个错误。 – user1899020 2013-03-25 18:59:04
“这工作得很好” - 不太可能。它可以编译,但它与原始代码完全不同(其中'p'是构造函数的*参数*)。 – us2012 2013-03-25 19:03:45
@ us2012是的,它们是不同的。我的意思是这帮助我确认它是一个编译器错误。 – user1899020 2013-03-25 19:55:02
如果单 ':' 是一个错字,那么什么是错用VC++。铿锵编译它。 – cubuspl42 2013-03-25 18:53:11
'ideone'也编译它(在C++ 11模式下) – maverik 2013-03-25 19:01:17
看起来确实像一个bug。查看链接的答案 – 2013-03-25 19:03:24