在 lex 文件中声明 hash_map 时出错

发布于 2024-10-13 04:18:12 字数 586 浏览 4 评论 0原文

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

%{

#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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

半衾梦 2024-10-20 04:18:12

您需要 std::hash 而不仅仅是 hash,因为您没有 using 语句将其拉入范围。另外,默认的 std::hash 将直接对指针进行哈希处理,这不适用于此用途 - 您需要一个哈希函数来对指向的 c 字符串进行哈希处理。您需要定义您自己的 hash 专业化,或者您自己的哈希函数 - 后者可能更好。

You need std::hash rather than just hash, since you have no using statement that will pull it into scope. Also, the default std::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 of hash, or your own hashing function -- the latter is probably better.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文