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目标代码中。以下标题代码:
// 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本身中有更好的方法来实现这一点吗?