gpt4 book ai didi

c++ - antlr cpp 目标的 header 部分不允许使用默认参数的外部函数

转载 作者:行者123 更新时间:2023-11-28 01:44:07 24 4
gpt4 key购买 nike

C++ (g++ 5.4.0) 有一个奇怪的限制。允许第 2 行,但不允许第 4 行:

extern yy(int x);
extern yy(int x); // re-declaration of an extern function is allowed
extern xx(int x, int y=3);
extern xx(int x, int y=3); // but re-declaration of an an extern function with default args is not allowed

(可以使用 -fpermissive 将此错误转换为警告,但这也会绕过其他错误,因此使用该编译器标志不是一个好习惯。所以我不使用此标志。)

这个问题体现在 antlr 的 cpp 目标代码中的 header 部分。以下 header 代码:

// G.g4:
grammar G;
@parser::header {
extern xx(int x, int y=3);
}

生成为:

// GParser.h:
extern xx(int x, int y=3);
...

// GParser.cpp:
extern xx(int x, int y=3);
#include "GParser.h"
...

我现在通过像这样重新编码来绕过这个错误:

// G.g4:
@parser::header {
#include "GHeader.h"
}

// GHeader.h:
#ifndef GHEADER
#define GHEADER
extern xx(int x, int y=3);
#endif //GHEADER

但是在 antlr4 本身有更好的方法吗?

最佳答案

这不是 GCC 中的限制,而是 C++ 中的限制。

来自 this default argument reference :

A redeclaration cannot introduce a default for an argument for which a default is already visible (even if the value is the same).

关于c++ - antlr cpp 目标的 header 部分不允许使用默认参数的外部函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45913392/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com