Jac*_*ian -2 c++ templates declaration forward-declaration
我有一个简单且可重现的代码,看起来像这样:
template <typename T>
class Proxy {
private:
Wrap<T> &self; // If I comment this, it will work
public:
Proxy() {}
};
template <typename T>
class Wrap {
T *p;
public:
Proxy<T> foo() {
return Proxy<T>();
}
};
int main()
{
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我得到的错误是:
'Wrap'没有命名类型
如果我评论Wrap<T> &self,那么它会起作用,但这不是我需要的.我需要Wrap<T>成为Proxy班上的一员.我怎样才能做到这一点?
你可以添加向前声明中Wrap的类定义之前Proxy,否则编译器无法知道它是一个类模板的名称.值得注意的是,引用数据成员不要求类型是完整类型,因此前向声明就足够了.
// forward declaration
template <typename T>
class Wrap;
template <typename T>
class Proxy {
private:
Wrap<T> &self;
public:
Proxy() {}
};
Run Code Online (Sandbox Code Playgroud)
顺便说一句,以下问题self是未初始化参考数据成员.
错误:'Proxy'的构造函数必须显式初始化引用成员'self'
| 归档时间: |
|
| 查看次数: |
88 次 |
| 最近记录: |