使用gcc 4.6的模板类的shared_ptr

时间:2013-08-16 23:12:59

标签: c++ templates c++11

尝试在c ++ 11中实现以下目标

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:错误:预期';'在'&lt;'标记之前

2 个答案:

答案 0 :(得分:6)

是的,这是可能的。

由于std::shared_ptr是一个新的C ++ 11特性,您必须在编译器上启用C ++ 11支持。在GCC下,选项包括:-std=c++0x-std=gnu++0x

如果我没有启用这些功能,我会得到与您完全相同的错误。

另一点是:不要忘记包含std::shared_ptr的标题:

#include <memory>

答案 1 :(得分:5)

只需包含std :: shared_ptr的标题,它确实编译好:

#include <memory>

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

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