以下代碼在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