我使用C ++标准库的查找有什么问题?

| 我正在尝试使用C ++标准库的
find
算法,如下所示:
  template<class T>
  const unsigned int AdjacencyList<T>::_index_for_node(
      const std::vector<T>& list, const T& node
  ) throw(NoSuchNodeException)
  {
    std::vector<T>::iterator iter = std::find(list.begin(), list.end(), node);
  }
当我尝试编译时,出现以下错误:
In file included from ../AdjacencyList.cpp:8:
../AdjacencyList.h: In member function ‘const unsigned int Graph::AdjacencyList<T>::_index_for_node(const std::vector<T, std::allocator<_Tp1> >&, const T&)’:
../AdjacencyList.h:99: error: expected ‘;’ before ‘iter’
../AdjacencyList.h:100: error: ‘iter’ was not declared in this scope
In file included from ../AdjacencyListTest.cpp:9:
../AdjacencyList.h: In member function ‘const unsigned int Graph::AdjacencyList<T>::_index_for_node(const std::vector<T, std::allocator<_Tp1> >&, const T&)’:
../AdjacencyList.h:99: error: expected ‘;’ before ‘iter’
../AdjacencyList.h:100: error: ‘iter’ was not declared in this scope
../AdjacencyList.h: In member function ‘const unsigned int Graph::AdjacencyList<T>::_index_for_node(const std::vector<T, std::allocator<_Tp1> >&, const T&) [with T = int]’:
../AdjacencyList.h:91:   instantiated from ‘const std::vector<T, std::allocator<_Tp1> > Graph::AdjacencyList<T>::neighbours(const T&) [with T = int]’
../AdjacencyListTest.cpp:18:   instantiated from here
../AdjacencyList.h:99: error: dependent-name ‘std::vector::iterator’ is parsed as a non-type, but instantiation yields a type
../AdjacencyList.h:99: note: say ‘typename std::vector::iterator’ if a type is meant
我觉得\“依赖名称'std :: vector :: iterator'被解析为非类型,但是实例化产生一个类型\”位是理解我做错事情的关键,但是我的豌豆-brain无法提取含义。 更新:根据需要的答案,我需要添加一个
typename
,并且还使用一个ѭ4so,因此有问题的代码行变成了:
    typename std::vector<T>::const_iterator iter = std::find(list.begin(), list.end(), node);
    
已邀请:
std::vector<T>::iterator iter = /* .... */; 
iterator
是从属名称(实际上取决于类型参数parameter8ѭ)。除非使用
typename
,否则假定从属名称不命名类型:
typename std::vector<T>::iterator iter = /* .... */;
有关更多信息,请考虑阅读Stack Overflow C ++常见问题解答条目“在哪里以及为什么必须在依赖名称上放置“模板”和“类型名称”?\” 由于
list
是const限定的,因此您还需要使用
const_iterator
。您可能还应该删除异常规范。最好不要写任何异常说明。     

要回复问题请先登录注册