2013-03-25 65 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