經典的排錯過程 expected unqualified-id before string constant

來源:互聯網
上載者:User

轉載自: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是自己寫的,要非常小心.

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.