所在的位置: mysql >> mysql资源 >> C编程报错ErrorUndefine

C编程报错ErrorUndefine

在C++代码中调用C的库文件,需加上externC,用来告知编译器:这是一个用C写成的库文件,请用C的方式连接他们。Undefinedreferenceto错误:这类错误是在连接过程中出现的,可能有两种原因∶一是使用者自己定义的函数或者全局变量所在源代码文件,没有被编译、连接,或者干脆还没有定义,这需要使用者根据实际情况修改源程序,给出全局变量或者函数的定义体;1)可以头文件中类加上#ifndefxxx_H#definexxx_Hnamespacexxx{};#endifcpp文件中包含头文件,usingnamespacexxx;或者其他访问方式(自行百度namepace使用方法)2)若全局namespacexxx被classxxx覆盖,请加上::3)请注意原来的makefile文件是否包含新增的文件,并且逻辑包含关系正确。二是未定义的符号是一个标准的库函数,在源程序中使用了该库函数,而连接过程中还没有给定相应的函数库的名称,或者是该档案库的目录名称有问题.在使用厂商新提供的库文件时,遇到了新问题,库中的函数程序不识别,同样的方法在使用以前的库时是可行的,在CSDN上求助并查阅一些资料后,问题已经解决。1)使用库的时候首先要明确库(或者头文件)是用什么编写的,如果是用C++编写的,那么在MFC中可以直接使用,如果是用c编写的,那么在#include头文件的时候要加上extern“C”{#include“OOXX.h”}注意格式换行要正确。2)为什么要如1)中那样操作呢,因为在c++中编译的方法和c不用,这是由于函数的重载造成的。在c中不涉及重载,如函数func(inta,floatb)编译成_func.在c++中涉及重载,如果只凭函数名是不足以判断是使用的哪个函数,所以编译的时候要加上变量,如函数func(inta,floatb)编译成_func_int_float,这样不但确定了函数名,还确定了使用哪中重载。正式由于以上的不同,使得c中编的函数不能在c++中直接使用,c++中为了兼容c的代码,提出了extern“C”的方法,在编译声明了extern“C”的函数函数时,会按照c语言的方法编译。如果不加extern“C”,在编译的时候会出现link错误:errorlink:unresolvedexternsymbol“long__stdcallfunc(inta,floatb)

QDASCFQAE

”之类的错误,说明编译器没有识别出函数function。


转载请注明:http://www.aierlanlan.com/rzgz/8024.html

  • 上一篇文章:
  •   
  • 下一篇文章: 没有了