在C++中进行模板调试

MLS*_*MLS 0 c++ templates

我有一个模板类:

template <class identifier,class registeredObject>
class FxPairRegistry : public FxRegistry<pair<identifier,registeredObject> >
{
 public:
  registeredObject GetEntry(identifier, FxBool assertValue = true);
  void RegisterInOrder(const pair<identifier,registeredObject> &ob);

  typedef typename std::vector<pair<identifier,registeredObject> >::iterator iter;
};
Run Code Online (Sandbox Code Playgroud)

然后我有:

template <class identifier,class registeredObject>
registeredObject FxPairRegistry<identifier,registeredObject>::GetEntry(identifier id, FxBool 
assertValue)
{
 for (iterator iter = mRegistryList.begin(); iter != mRegistryList.end(); iter++)
 {
  if ((*iter).first == id)
  {
   return (*iter).second;
  }
 }
}
Run Code Online (Sandbox Code Playgroud)

但我得到的错误如下:

error: missing template arguments before 'iter'
error: expected `;' before 'iter'
error: expected primary-expression before '!=' token
error: 'mRegistryList' was not declared in this scope
error: expected primary-expression before '++' token
error: expected primary-expression before ')' token
error: expected primary-expression before ')' token
error: missing template arguments before 'iter'
error: expected `;' before 'iter'
error: expected primary-expression before '!=' token
error: 'mRegistryList' was not declared in this scope
error: expected primary-expression before '++' token
Run Code Online (Sandbox Code Playgroud)

我不知道我做错了什么,但我确实生锈了一点......

Tyl*_*nry 5

看来在这里,你是typedef'ing一个叫做的类型iter:

typedef typename std::vector<pair<identifier,registeredObject> >::iterator iter;
Run Code Online (Sandbox Code Playgroud)

然后在这里:

iterator iter = mRegistryList.begin()
Run Code Online (Sandbox Code Playgroud)

您正在尝试定义一个名为 iter type 的变量iterator,该变量(来自您显示的代码)不是任何存在类型的名称.