VS2010 中 error 2732: 鏈接規范與的早期規范沖突 的解決


在實驗室做項目的時候遇到了這個問題,終於整明白了。

一般來說這個錯誤出現在類似以下的語句中

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM