Ошибка объявления hash_map в файле lex - PullRequest
2 голосов
/ 19 января 2011

Я работаю над написанием простого препроцессора для компилятора. Ниже отредактированный фрагмент моего кода:

%{

#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: ошибка: ожидаемый конструктор, деструктор или преобразование типов перед To <’токен </p>

Есть идеи, что может быть не так с этим? Я скопировал и вставил эту строку из документации sgi.

1 Ответ

2 голосов
/ 19 января 2011

Вам нужно std::hash, а не просто hash, поскольку у вас нет оператора using, который вытащил бы его в область видимости.Кроме того, по умолчанию std::hash<const char *> будет напрямую хешировать указатель, который не будет работать для этого использования - вам нужна хеш-функция, которая хеширует указанную c-строку.Вам нужно определить свою собственную специализацию hash или собственную функцию хеширования - последняя, ​​вероятно, лучше.

...