我正在编写一小段代码来练习基于策略的模板编程。在这个程序中,定义了一个 CDecayer 类,它使用 DecayerPolicy 作为它的策略类。然而,编译器提示 "预期`;'在有关CDecayer的部分“”之前。有什么建议么?

#include <iostream>
#include <vector>
#include <map>
#include <utility>



int main()
{
}

struct CAtom
{
};

class CStateUpdater
{
public:
  virtual void UpdateState(CAtom* patom) = 0;
};


struct CDecayerPolicy
{
  typedef std::pair<unsigned int, unsigned int> indexpair;
  std::map<indexpair, double> mDecayRate;

  CDecayerPolicy()
  {
    mDecayRate.clear();
  }

  ~CDecayerPolicy()
  {}
};



template<class DecayerPolicy>
class CDecayer: public DecayerPolicy, public CStateUpdater
{
public:
  virtual void UpdateState(CAtom* patom)
  {
    for(std::map<DecayerPolicy::indexpair, double >::const_iterator it =  DecayerPolicy::mDecayRate.begin(); it!= DecayerPolicy::mDecayRate.end(); it++)
      {
// atom state modification code
      }
  }
};

最佳答案

您需要在依赖类型之前添加 typename,即

for(typename std::map<typename DecayerPolicy::indexpair, double >::const_iterator
    it = DecayerPolicy::mDecayRate.begin();
    it != DecayerPolicy::mDecayRate.end();
    it++)

关于C++模板编程问题在 `;'之前需要 ‘it’吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1590503/

10-10 10:22