在實驗室做項目的時候遇到了這個問題,終於整明白了。
一般來說這個錯誤出現在類似以下的語句中
extern "C" int yylex(void);
extern "C" int yyparse( void );
extern "C" int yyerror(const char *fmt, ...);
我們看extern 這個關鍵字,是C++在調用其他語言的時候用來拓展函數的,extern "C" 就是說當我們在一個項目中出現了C、C++混編,C++文件中調用了C的函數,那么需要將這個函數拓展過來用。
但是extern "C" 也被編譯器看作是函數的類型參數之一,因此extern "C" int yylex(void);和int yylex(void);如果同時在項目里出現,則會出現error2732,也就是定義沖突。
解決方案:
找到函數的聲明部分和調用部分,在兩處都加上如下代碼:
#ifdef __cplusplus
extern "C" { #endif int yyparse( void ); //。。。各種需要的函數聲明 #ifdef __cplusplus } #endif
編譯,就可以通過啦啦啦。
重點注意函數初次聲明和拓展聲明兩處,如果發生了聲明則一定要同時含有或不含有相同的extern關鍵字。
OK,繼續我的搭環境之路T^T
BY XHYU
