error LNK2001: unresolved external symbol "class CGPS cyGps" (?cyGps@@3VCGPS@@A)

来源:互联网 发布:mac误删除文件恢复 编辑:程序博客网 时间:2024/05/20 10:12

        这两天在调试程序时,一直出现以下错误信息: 
1>Control1.obj : error LNK2001: unresolved external symbol "class CCESeries * g_SerialObject" (?g_SerialObject@@3PAVCCESeries@@A)
1>Control1.obj : error LNK2001: unresolved external symbol "class CGPS cyGps" (?cyGps@@3VCGPS@@A)
1>TQ2440A_SDK (ARMV4I)\Debug/GpsSerial.dll : fatal error LNK1120: 2 unresolved externals

      出现这错误的原因是在COM控件的接口函数实现Control1.cpp文件中直接定义:extern CCESeries g_SerialObject[4]; extern CGPS cyGps;本来这样定义的目的是为了在Control1.cpp中能够调用class CCESeries (在CESeries.h中定义 )和 class CGPS (在GPS.h中定义) 中的函数,结果出错了。

     解决方法:在头文件CESeries.h中声明 extern  CCESeries  g_SerialObject[4];在Control1.cpp文件中定义

                         CCESeries  g_SerialObject[4]。
                         在头文件GPS.h中声明 extern  CGPS cyGps;在Control1.cpp文件中定义 CGPS cyGps。

  修改:

          由于  g_SerialObject[4] 和 cyGps 只在Control1.cpp被使用,因此在CESeries.h中不用添加这句 extern  CCESeries  g_SerialObject[4];在Control1.cpp中直接定义就可以用。同理,cyGps也是一样的,在 GPS.h中不用声明 extern  CGPS cyGps。

          但是当要用到的变量在多个文件中使用时,就需要在头文件中声明,例如,pGPS被Control1.cpp和GPS.cpp使用,则需要在GPS.h中声明,extern PGPSData pGps,并且在其中一个文件中定义 PGPSData pGps 。