C ++:为什么不编译?

时间:2011-07-29 13:11:52

标签: c++ hash compilation

我从谷歌的sparsehash网站获得了以下C ++代码:

#include <iostream>
#include <google/dense_hash_map>
#include <string.h>

using google::dense_hash_map;      // namespace where class lives by default
using std::cout;
using std::endl;
using ext::hash;  // or __gnu_cxx::hash, or maybe tr1::hash, depending on your OS

struct eqstr
{
  bool operator()(const char* s1, const char* s2) const
  {
    return (s1 == s2) || (s1 && s2 && strcmp(s1, s2) == 0);
  }
};

int main(void){
  dense_hash_map<const char*, int, hash<const char*>, eqstr> months;

  months.set_empty_key(NULL);
  months["january"] = 31;
  months["february"] = 28;
  months["march"] = 31;
  months["april"] = 30;
  months["may"] = 31;
  months["june"] = 30;
  months["july"] = 31;
  months["august"] = 31;
  months["september"] = 30;
  months["october"] = 31;
  months["november"] = 30;
  months["december"] = 31;

  cout << "september -> " << months["september"] << endl;
  cout << "april     -> " << months["april"] << endl;
  cout << "june      -> " << months["june"] << endl;
  cout << "november  -> " << months["november"] << endl;
}

我收到以下错误:

using ext::hash

  

'ext'尚未宣布

dense_hash_map<const char*, int, hash<const char*>, eqstr> months;

  
      
  • 'hash'未在此范围内声明
  •   
  • 模板参数3无效
  •   
  • 在','令牌
  • 之前预期的非限定ID   
  • '&gt;'令牌
  • 之前的预期初始值设定项   

months.set_empty_key(NULL);

  

'月'未在此范围内宣布

我有点像C ++菜鸟,希望有人能指出我正确的方向。

非常感谢,

2 个答案:

答案 0 :(得分:5)

也许你要尝试用ext::hash替换tr1::hash

答案 1 :(得分:0)

您是否尝试过注释建议的__gnu_cxx :: hash或tr1 :: hash替换ext :: hash?