C++(G ++ 5.4.0)具有奇怪的限制。第二行是允許的,但4號線是不允許的:標題部分不允許extern函數與默認參數
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本身做到這一點?
這正是我的問題,是否通過將我的代碼放在標題部分來做正確的事情。謝謝,我會檢查其他部分並決定使用哪個部分。 – R71