此代码无法复制:
namespace boost
{
template<class T> class scoped_ptr;
}
namespace FooNamespace
{
class FooClass
{
boost::scoped_ptr<FooType> foo;
};
}
Run Code Online (Sandbox Code Playgroud)
g ++说:错误:字段'foo'的类型不完整
我认为没关系,因为我从实际的boost头文件中复制了scoped_ptr声明...我搞砸了什么?
注意:问题不在于error: field ‘foo’ has incomplete type
.我试着替换它FooType
无济于事......
谢谢!
如果必须知道前向声明类型的大小,则前向声明不起作用.由于您要嵌入boost::scoped_ptr<T>
in 的实例FooClass
,因此必须知道该类型的大小.
你可以嵌入一个指针,但这可能会破坏首先的目的scoped_ptr<T>
.但是,它会编译:
class FooClass
{
boost::scoped_ptr<FooType> *foo;
};
Run Code Online (Sandbox Code Playgroud)
对于不完整类型(即已声明但未定义的类型)可以执行的操作存在限制; 你不能做的一件事是定义那种类型的变量.这是因为必须知道大小,在这种情况下是为了计算对象中成员变量的布局.
你可以做的事情包括使用指针或类型的引用(只要你不解引它),声明一个类型作为参数或返回值的函数,并声明该类型的静态或非成员变量.
归档时间: |
|
查看次数: |
2724 次 |
最近记录: |