3
4

3 回答 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 回答