C++ 如何转发boost智能ptr?

C++ 如何转发boost智能ptr?,c++,boost,C++,Boost,此代码无法编译: namespace boost { template<class T> class scoped_ptr; } namespace FooNamespace { class FooClass { boost::scoped_ptr<FooType> foo; }; } namespace boost { 模板类作用域\u ptr; } 名称空间 { 班级 { boost::范围有限的\u ptr foo; }; } g++说:错误:字段

此代码无法编译:

namespace boost
{
  template<class T> class scoped_ptr;
}

namespace FooNamespace
{

class FooClass
{
  boost::scoped_ptr<FooType> foo;
};

}
namespace boost
{
模板类作用域\u ptr;
}
名称空间
{
班级
{
boost::范围有限的\u ptr foo;
};
}
g++说:
错误:字段“foo”的类型不完整

我认为这是可以的,因为我从实际的boost头文件复制了作用域_ptr声明。。。我搞砸了什么

注意:问题不在
FooType
中。我试着用
int
替换它,但没有用


谢谢

如果必须知道前向声明类型的大小,则前向声明不起作用。由于要在
FooClass
中嵌入
boost::scoped_ptr
的实例,因此必须知道该类型的大小

您可以嵌入一个指针,但这可能会首先破坏
作用域\u ptr
的目的。然而,它将汇编:

class FooClass
{
    boost::scoped_ptr<FooType> *foo;
};
class类
{
boost::作用域_ptr*foo;
};

对不完整类型(即已声明但未定义的类型)的处理有限制;您不能做的一件事是定义这种类型的变量。这是因为大小必须是已知的,在这种情况下,为了计算出对象中成员变量的布局


您可以做的事情包括使用类型的指针或引用(只要您不取消引用它),将该类型作为参数或返回值声明函数,以及声明该类型的静态或非成员变量。

哦,我明白了。我想我得用
auto\ptr
了。我不想让my.h的用户必须包含boost或支持C++11(目前)-/