2013-08-16 33 views
-1

努力實現以下用C++ 11shared_ptr的使用模板類GCC 4.6

template< class A > 
    class B{ 
     std::shared_ptr<A> a_shared_ptr; 
    }; 

B<int> b; 

的是這可能嗎?

獲得以下錯誤

../../src/threading/node.h:26:錯誤:ISO C++禁止 '的shared_ptr' 的聲明無 類型../../src/threading /node.h:26:錯誤:無效使用'::' ../../src/threading/node.h:26:error:expected';''<'token

+5

當然,爲什麼不該有可能嗎? –

+2

你試過*編譯它嗎? (在B的卷尾結束處添加分號後)? – WhozCraig

+2

在C11中?不,絕對不是。它沒有模板也沒有類。 –

回答

5

Just just include標題爲std :: shared_ptr,它編譯得很好:

#include <memory> 

template< class A > 
class B{ 
    std::shared_ptr<A> a_shared_ptr; 
}; 

int main() 
{ 
    B<int> b; 
    return 0; 
} 
6

是的,這是可能的。

由於std::shared_ptr是一個新的C++ 11功能,您必須在您的編譯器上啓用C++ 11支持。在GCC下,選項爲:-std=c++0x-std=gnu++0x

如果我不啓用這些功能,我會得到與您完全相同的錯誤。

另一點是:不要忘了包括std::shared_ptr頭:

#include <memory>