在 lex 文件中声明 hash_map 时出错
我正在为编译器编写一个简单的预处理器。以下是我的代码的编辑片段:
%{
#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: 错误:预期的构造函数, 析构函数或之前的类型转换 '<'令牌
有什么想法这可能有什么问题吗?我几乎从 sgi 文档中复制并粘贴了这一行。
I'm working on writing a simple preprocessor for a compiler. Below is an edited snippet of my code:
%{
#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
%%
When I compile I get the following error:
dpp.l:28: error: expected constructor,
destructor, or type conversion before
‘<’ token
Any ideas what might be wrong with this? I pretty much copied and pasted this line from the sgi documentation.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您需要
std::hash
而不仅仅是hash
,因为您没有using
语句将其拉入范围。另外,默认的std::hash
将直接对指针进行哈希处理,这不适用于此用途 - 您需要一个哈希函数来对指向的 c 字符串进行哈希处理。您需要定义您自己的hash
专业化,或者您自己的哈希函数 - 后者可能更好。You need
std::hash
rather than justhash
, since you have nousing
statement that will pull it into scope. Also, the defaultstd::hash<const char *>
will hash the pointer directly, which won't work for this use -- you need a hash function that hashes the c-string pointed at. You need to define your own specialization ofhash
, or your own hashing function -- the latter is probably better.