轉載自:http://blog.csdn.net/zdl1016/article/details/5824443
答案是:My Code少了一個 “;”
=====================================
現場:
回到 報錯的那一行,發現沒有問題。
報錯的檔案:ptlogin2_api.h(22行):expected unqualified-id before string constant
在我的一個cpp的 代碼中間(絕對不是在標頭檔),使用了這個檔案 ptlogin2_api.h 裡面的 一個函數 xxx,
#ifdef __cplusplus
extern "C" {================>報錯的哪一行
#endif
結果發現那裡錯了呢。
我所包含的 離 ptlogin2_api.h 最近的一個包含檔案
#include "dev_db_def.h"===================》裡面出了問題。枚舉值定義最後少了“;”。
#include "ptlogin_app_id.h"
#include "panel_auth.h"
==========================================
其實有多個方案可以發現這個問題
1)把新加的代碼全部去掉,包括標頭檔,確保自己的代碼可以編譯通過。(其實這樣就可以發現時自己的問題了)
2)既然報錯的地方沒問題,代碼附近的問題,或者是附近別的檔案的問題。經常出現這樣的情況,一個檔案裡面最後少了 “;”,在另一個檔案裡面報錯。(通過這個方法有可能發現問題)
3)vi dev_insert.o 將代碼展開,查看編譯器最終編譯代碼時,的檔案狀態,這個方法是萬能的。但也最複雜。
我的 dev_insert.o 展開如下:
45053 # 42 "../comm/dev_db_def.h"
45054 enum _ErrorCodeForeground
45055 {
45056 DR_ERR_OK = 0,
45057 DR_ERR_PARAMS_VALIDITY = 1000,
45058 DR_ERR_LOGIN_STATE,
45059 DR_ERR_INSERT_DEV,
45060 DR_ERR_SELECT_DEV,
45061 DR_ERR_UPDATE_DEV,
45062 DR_ERR_ACTION_TYPE,
45063
45064 }
45065 # 15 "dev_insert.cpp" 2
45066 # 1 "/data/home/nemo/code/isd_qzoneappbase_proj/base_class/base_lib/include/ptlogin_app_id.h" 1
45067 # 16 "dev_insert.cpp" 2
45068 # 1 "/data/home/nemo/code/isd_qzoneappbase_proj/outerlib/panel_auth/include/panel_auth.h" 1
45069
45070
45071
45072 # 1 "/data/home/nemo/code/isd_qzoneappbase_proj/base_class/extern_libs/tdev/include/toiw_all.h" 1
45073 # 5 "/data/home/nemo/code/isd_qzoneappbase_proj/outerlib/panel_auth/include/panel_auth.h" 2
45074 # 1 "/data/home/nemo/code/isd_qzoneappbase_proj/base_class/extern_libs/tbase/include/tbase_all.h" 1
45075 # 6 "/data/home/nemo/code/isd_qzoneappbase_proj/outerlib/panel_auth/include/panel_auth.h" 2
45076 # 1 "/data/home/nemo/code/isd_qzoneappbase_proj/outerlib/panel_auth/include/ptlogin2_api.h" 1
45077 # 25 "/data/home/nemo/code/isd_qzoneappbase_proj/outerlib/panel_auth/include/ptlogin2_api.h"
45078 extern "C"{
45079
====================================
詳細的排錯過程可以參考 郵箱裡面的 一個文檔 以gcc搜尋索引鍵 排錯即可。
====================================
gcc的常見報錯error,通常是因為少了 ; 號
expected unqualified-id before ****
一般出現如下的提示資訊都是是好了 分號‘;’,從報錯的地方往上找,看看上麵包含的標頭檔的結尾 類定義、枚舉定義的最後是否 少了 分號。
error : multiple types in one declaration
一般因為,一個檔案裡面定義了兩個class,其中前面的class 沒有;號,在第二個class最後報錯.
=====================================
類型重定義 連結失敗,如果找不到代碼的原因,有可能是makefile檔案寫的有問題
把同一個 .o檔案連結了兩次,就出現了這個錯誤.鬱悶.
gcc下 makefile是自己寫的,要非常小心.