尝试在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;'标记之前
答案 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;
}