在lex文件中声明hash_map时出错

时间:2011-01-19 17:33:56

标签: c++ hashmap lex

我正在为编译器编写一个简单的预处理器。以下是我的代码的编辑片段:

%{

#include <string.h>
#include <hash_map>
#include "scanner.h"
#include "errors.h"

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

std::hash_map<const char*, char*, hash<const char*>, eqstr> defs; // LINE 28

%}

// Definitions here

%%

// Patterns and actions here

%%

编译时出现以下错误:

  

dpp.l:28:错误:预期的构造函数,   析构函数,或类型转换之前   '&lt;'令牌

任何想法可能有什么问题?我几乎从sgi文档中复制并粘贴了这一行。

1 个答案:

答案 0 :(得分:2)

您需要std::hash而不仅仅是hash,因为您没有将using语句拉入范围。此外,默认的std::hash<const char *>将直接散列指针,这对于此用途不起作用 - 您需要一个哈希函数来散列指向的c字符串。您需要定义自己的hash专精或您自己的散列函数 - 后者可能更好。