问问题
271 次
3 回答
7
boost::ptr_vector<S>::iterator it;
这需要使用 C++ 关键字typename
:
typename boost::ptr_vector<S>::iterator it;
否则,C++ 不知道ptr_vector<S>::iterator
应该是什么。这是因为 的定义ptr_vector<S>
取决于模板参数S
,而在模板定义时 的值S
是未知的。但是编译器需要能够在ptr_vector<S>::iterator
不知道S
确切内容的情况下理解该行。
因此编译器假定依赖名称是变量(因此是 的静态成员ptr_vector<S>
);您需要使用typename
它来告诉编译器依赖名称是类型而不是变量。
于 2011-07-14T07:13:35.243 回答
4
我认为您需要添加 typename - 我认为您需要:
typename boost::ptr_vector<S>::iterator it;
每当使用模板时,您都会看到一些错误,例如:
error: expected ';' before it;
这是因为编译器没有将前面的类型it
视为类型,因此需要添加一个typename
.
于 2011-07-14T07:15:12.790 回答
0
它没有解释错误消息 IMO,但在您发布的代码中,您为boost::ptr_vector<S>::iterator
变量分配了一个boost::ptr_vector<P>::iterator
值。
于 2011-07-14T07:14:10.713 回答