经典的排错过程 expected unqualified-id before string constant

答案是:我的代码少了一个 “;”
=====================================
现场:

回到 报错的那一行,发现没有问题。

报错的文件: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是自己写的,要非常小心.

你可能感兴趣的:(C++,c,gcc,C#)