今天在編譯包含.c和.cpp的QT專案,在整合各種程式碼的時候,碰到一些問題,為了方便後查,初步總結如下:
1.新版QT中一般使用g++編譯cpp檔案和c檔案,可以在專案中同時使用c檔案和cpp檔案。
字尾cpp檔案g++自動識別為c++程式碼自動進行c++編譯,字尾c檔案自動識別為c程式碼進行c編譯。這個時候必須注意在c檔案中不要使用c++內容和c++的標頭檔案
2.呼叫.c檔案中的函式出現undefined reference to `xxxxx()'。
這是C/C++相容問題,在C的標頭檔案的相關函式宣告新增extern "C"即可解決,例如
#ifdef __cplusplus
extern "C" {
#endif
extern int test(int, int);
#ifdef __cplusplus
}
#endif
extern "C"的主要作用是為了能夠正確實現C++程式碼呼叫C語言程式碼
3.出現error: memory: No such file or directory #include <memory>
這是.c檔案中引用c++標準的原因,可將檔案字尾修改為.cpp,使用C++編譯
4.出現unknown type name ‘namespace’
這是c編譯c++的問題, c中沒有namespace關鍵子,可將檔案字尾修改為.cpp,使用C++編譯,或者去掉該關鍵字
5.出現iostream no such file or directory
在.h中呼叫了#include <iostream> , 此標頭檔案是cpp對應的標頭檔案,在其他.c對應的標頭檔案中呼叫了它,導致找不到的問題
修改方法1 使用stdio替代,stdio在.c和.cpp中都可以使用,方法2 .c檔案改為.cpp