VC6.0中 各link错误解决方案
VISUAL_C 6.0常见错误提示汇总

Ambiguous operators need parentheses-----------不明确的运算需要用括号括起Ambiguous symbol''xxx''----------------不明确的符号Argument list syntax error----------------参数表语法错误Array bounds missing------------------丢失数组界限符Array size toolarge-----------------数组尺寸太大Bad character in paramenters------------------参数中有不适当的字符Bad file name format in include directive--------------------包含命令中文件名格式不正确Bad ifdef directive synatax------------------------------编译预处理ifdef有语法错Bad undef directive syntax---------------------------编译预处理undef有语法错Bit field too large----------------位字段太长Call of non-function-----------------调用未定义的函数Call to function with no prototype---------------调用函数时没有函数的说明Cannot modify a const object---------------不允许修改常量对象Case outside of switch----------------漏掉了case语句Case syntax error------------------Case语法错误Code has no effect-----------------代码不可述不可能执行到Compound statement missing{--------------------分程序漏掉"{"Conflicting type modifiers------------------不明确的类型说明符Constant expression required----------------要求常量表达式Constant out of range in comparison-----------------在比较中常量超出范围Conversion may lose significant digits-----------------转换时会丢失意义的数字Conversion of near pointer not allowed-----------------不允许转换近指针Could not find file''xxx''-----------------------找不到XXX文件Declaration missing;----------------说明缺少";"houjiumingDeclaration syntax error-----------------说明中出现语法错误Default outside of switch------------------Default出现在switch语句之外Define directive needs an identifier------------------定义编译预处理需要标识符Division by zero------------------用零作除数Do statement must have while------------------Do-while语句中缺少while部分Enum syntax error---------------------枚举类型语法错误Enumeration constant syntax error-----------------枚举常数语法错误Error directive:xxx------------------------错误的编译预处理命令Error writing output file---------------------写输出文件错误Expression syntax error-----------------------表达式语法错误Extra parameter in call------------------------调用时出现多余错误File name too long----------------文件名太长Function call missing-----------------函数调用缺少右括号Fuction definition out of place------------------函数定义位置错误Fuction should return a value------------------函数必需返回一个值Goto statement missing label------------------Goto语句没有标号Hexadecimal or octal constant too large------------------16进制或8进制常数太大Illegal character''x''------------------非法字符xIllegal initialization------------------非法的初始化Illegal octal digit------------------非法的8进制数字houjiumingIllegal pointer subtraction------------------非法的指针相减Illegal structure operation------------------非法的结构体操作Illegal use of floating point-----------------非法的浮点运算Illegal use of pointer--------------------指针使用非法Improper use of a typedefsymbol----------------类型定义符号使用不恰当In-line assembly not allowed-----------------不允许使用行间汇编Incompatible storage class-----------------存储类别不相容Incompatible type conversion--------------------不相容的类型转换Incorrect number format-----------------------错误的数据格式Incorrect use of default---------------------Default使用不当Invalid indirection---------------------无效的间接运算Invalid pointer addition------------------指针相加无效Irreducible expression tree-----------------------无法执行的表达式运算Lvalue required---------------------------需要逻辑值0或非0值Macro argument syntax error-------------------宏参数语法错误Macro expansion too long----------------------宏的扩展以后太长Mismatched number of parameters in definition---------------------定义中参数个数不匹配Misplaced break---------------------此处不应出现break语句Misplaced continue------------------------此处不应出现continue语句Misplaced decimal point--------------------此处不应出现小数点Misplaced elif directive--------------------不应编译预处理elifMisplaced else----------------------此处不应出现else houjiumingMisplaced else directive------------------此处不应出现编译预处理elseMisplaced endif directive-------------------此处不应出现编译预处理endifMust be addressable----------------------必须是可以编址的Must take address of memory location------------------必须存储定位的地址No declaration for function''xxx''-------------------没有函数xxx的说明No stack---------------缺少堆栈No type information------------------没有类型信息Non-portable pointer assignment--------------------不可移动的指针(地址常数)赋值Non-portable pointer comparison--------------------不可移动的指针(地址常数)比较Non-portable pointer conversion----------------------不可移动的指针(地址常数)转换Not a valid expression format type---------------------不合法的表达式格式Not an allowed type---------------------不允许使用的类型Numeric constant too large-------------------数值常太大Out of memory-------------------内存不够用houjiumingParameter''xxx''is never used------------------能数xxx没有用到Pointer required on left side of->-----------------------符号->的左边必须是指针Possible use of''xxx''before definition-------------------在定义之前就使用了xxx(警告)Possibly incorrect assignment----------------赋值可能不正确Redeclaration of''xxx''-------------------重复定义了xxxRedefinition of''xxx''is not identical-------------------xxx的两次定义不一致Register allocation failure------------------寄存器定址失败Repeat count needs an lvalue------------------重复计数需要逻辑值Size of structure or array not known------------------结构体或数给大小不确定Statement missing;------------------语句后缺少";"Structure or union syntax error--------------结构体或联合体语法错误Structure size too large----------------结构体尺寸太大Sub scripting missing]----------------下标缺少右方括号Superfluous&with function or array------------------函数或数组中有多余的"&" Suspicious pointer conversion---------------------可疑的指针转换Symbol limit exceeded---------------符号超限Too few parameters in call-----------------函数调用时的实参少于函数的参数不Too many default cases-------------------Default太多(switch语句中一个)Too many error or warning messages--------------------错误或警告信息太多Too many type in declaration-----------------说明中类型太多houjiumingToo much auto memory in function-----------------函数用到的局部存储太多Too much global data defined in file------------------文件中全局数据太多Two consecutive dots-----------------两个连续的句点Type mismatch in parameter xxx----------------参数xxx类型不匹配Type mismatch in redeclaration of''xxx''----------------xxx重定义的类型不匹配Unable to create output file''xxx''----------------无法建立输出文件xxxUnable to open include file''xxx''---------------无法打开被包含的文件xxxUnable to open input file''xxx''----------------无法打开输入文件xxxUndefined label''xxx''-------------------没有定义的标号xxxUndefined structure''xxx''-----------------没有定义的结构xxxUndefined symbol''xxx''-----------------没有定义的符号xxxUnexpected end of file in comment started on line xxx----------从xxx行开始的注解尚未结束文件不能结束Unexpected end of file in conditional started on line xxx----从xxx开始的条件语句尚未结束文件不能结束Unknown assemble instruction----------------未知的汇编结构houjiumingUnknown option---------------未知的操作Unknown preprocessor directive:''xxx''-----------------不认识的预处理命令xxx Unreachable code------------------无路可达的代码Unterminated string or character constant-----------------字符串缺少引号User break----------------用户强行中断了程序Void functions may not return a value-----------------Void类型的函数不应有返回值Wrong number of arguments-----------------调用函数的参数数目错''xxx''not an argument-----------------xxx不是参数''xxx''not part of structure--------------------xxx不是结构体的一部分xxx statement missing(--------------------xxx语句缺少左括号xxx statement missing)------------------xxx语句缺少右括号xxx statement missing;--------------------xxx缺少分号houjiumingxxx''declared but never used-------------------说明了xxx但没有使用xxx''is assigned a value which is never used----------------------给xxx赋了值但未用过Zero length structure------------------结构体的长度为零。
VC6.0编译常见错误的详解及其错误分析(范文)

VC6.0编译常见错误的详解及其错误分析(范文)第一篇:VC6.0编译常见错误的详解及其错误分析(范文)VC6.0编译常见错误第一部分编译错误1. error C2001: newline in constant编号:C2001直译:在常量中出现了换行。
错误分析:(1)字符串常量、字符常量中是否有换行。
(2)在这句语句中,某个字符串常量的尾部是否漏掉了双引号。
(3)在这语句中,某个字符创常量中是否出现了双引号字符““”,但是没有使用转义符“””。
(4)在这句语句中,某个字符常量的尾部是否漏掉了单引号。
(5)是否在某句语句的尾部,或语句的中间误输入了一个单引号或双引号。
2. error C2015: too many characters in constant编号:C2015直译:字符常量中的字符太多了。
错误分析:单引号表示字符型常量。
一般的,单引号中必须有,也只能有一个字符(使用转义符时,转义符所表示的字符当作一个字符看待),如果单引号中的字符数多于4个,就会引发这个错误。
另外,如果语句中某个字符常量缺少右边的单引号,也会引发这个错误,例如:if(x == 'x || x == 'y'){ … }值得注意的是,如果单引号中的字符数是2-4个,编译不报错,输出结果是这几个字母的ASC码作为一个整数(int,4B)整体看待的数字。
两个单引号之间不加任何内容会引发如下错误:error C2137:empty characterconstant。
3. error C2018: unknown character '0x##'编号:C2018直译:未知字符‘0x##’。
错误分析:0x##是字符ASC码的16进制表示法。
这里说的未知字符,通常是指全角符号、字母、数字,或者直接输入了汉字。
如果全角字符和汉字用双引号包含起来,则成为字符串常量的一部分,是不会引发这个错误的。
VC6.0常见错误信息分析

1.程序开发过程中出现的错误类型我们在进行程序设计时,不可避免地会犯错误。
程序中的错误可以分为三类:编译错误、运行时错误和逻辑错误。
1.1编译错误编译错误(Compile errors)又称为编译时错误(Compiling-time errors): 是由于错误的编码产生的。
例如关键字拼写错误、将中文标点符号当成英文符号使用、遗漏了某些必要的标点符号或者使用了一个没有定义的标识符。
编译错误一般都是语法错误,当编译器对程序进行语法检查时,都能发现这些错误,并能够指出产生错误的位置(标出行号)。
我们可以根据编译出错信息指出的行号找到对应的源代码行改正错误,重新编译源程序。
只有当所有的编译错误被改正后,才能通过编译检查,产生目标代码文件。
改正编译错误的关键是要能正确理解编译器给出的编译错误信息。
VC++环境中的编译、链接错误信息是用英文表示的。
对于英文基础薄弱的读者,可以参考本实验指导书后面的“VC++编译、链接常见错误和警告信息中英文对照”。
通常情况下,一个语法错误可能产生多条编译错误信息,这是由于株连错误造成的,建议读者在处理编译错误时,找到第一个出现错误的位置改正后重新编译。
这样能够避免被株连错误迷惑。
值得指出的是,现在大部分编译器对错误的定位不精确,如果在编译器指出的行没有发现错误,应该向前查找错误。
例如,当提示第10行发生错误时,如果在第10行没有发现错误,请从第10行开始往前查找错误并修改之。
1.2运行时错误运行时错误(Run-time errors)是在程序的运行阶段出现的,当运行环境检测到程序的某些操作无法执行,例如除数为零时,就会出现运行时错误。
当运行环境检测到程序的某些操作是被禁止的,也会产生运行时错误。
例如,访问数组时超越数组的边界,空指针引用(NULL pointer assignment,空指针赋值,即有指针未赋具体地址就使用了)等等。
1.3逻辑错误逻辑错误(Logic errors):当程序没有按照程序员的意图执行时,就表明程序中存在逻辑错误。
VC++6.0裏面20种C语言常见错误代码解释

11、error C2509: 'OnTimer' : member function not declared in 'CHelloView'
成员函数“OnTimer”没有在“CHelloView”中声明。
12、error C2511: 'reset': overloaded member function 'void (int)' not found in 'B'
9、error C2146: syntax error : missing ';' before identifier 'dc'
句法错误:在“dc”前丢了“;”。
10、error C2196: case value '69' already used
值69已经用过。(一般出现在switch语句的case分支中)
重载的函数“void reset(int)”在类“B”中找不到。
13、error C2555: 'B::f1': overriding virtual function differs from 'A::f1' only by return type or calling convention
解决方法:
其一,包含正确路径的#include "stdafx.h";
其二,在*.cpp文件的Setting里面设置,C++选项中的分类 precompiled header,选择不包含头文件即可。
2、fatal error C1083: Cannot open include file: 'R…….h': No such file or directory
VisualBasic 6.0常见错误及解决方案

解决方案 ⑴ 关闭不需要的应用程序、文档或资源文件。 ⑵ 将庞大的模块或过程分成几个。 虽然这样不能节省内存空间, 但可避免 64K 段边界 限制。 ⑶ 按增强方式重新启动 Microsoft Windows 。 ⑷ 空出一些磁盘空间以增加虚拟内存,或至少确保有空馀的空间。 ⑸ 减少一些驻留程序。 ⑹ 减少一些不需要的设备驱动程序。 ⑺ 减少 Public 变量的数量。 4. 下标越界(错误 9) 错误原因 只能在定义的范围内访问数组元素和集合成员。
错误分析 ⑴ 引用了不存在的数组元素。 ⑵ 声明数组时没有指定元素的数目。例如,下列的代码就会导致此错误:
2
Dim MyArray() As Integer MyArray(8) = 234 ' 导致错误 9。 ⑶ 引用了不存在的集合成员。 ⑷ 使用速写形式的下标,结果指定了错误的元素。 解决方案 ⑴ 下标比可能下标范围大或小,或是在应用程序中这一边的数组没有指定范围。检查 数组的声明以确认其上界和下界。 若使用的是重新指定范围的数组, 应使用 UBound 和 LBound 函数来决定数组访问。如果索引指定为变量,应检查变量名的拼写。 ⑵ Visual Basic 并不会将没有指定范围的数组自动设为 0 – 10。相反必须使用 Dim 或 ReDim 来指定数组中元素的数目。 ⑶ 试着使用 For Each...Next 结构代替指定元素下标。 ⑷ 例如, 当在集合上使用 ! 运算子时, ! 自动指定了一个键。 例如 object!keyname.value 和 object.item(keyname).value 是一样的。在此例中,集合中如果 keyname 表示一 个错误键,错误就会产生。若要改进此错误,在集合对象中使用正确的键名称或索 引。 5. 数组长度固定或临时被锁定(错误 10) 错误原因 并非所有数组都可重设大小。即使数组声明成动态,或者数组是在 Variant 变量中, 也会被临时锁定。 错误分析 ⑴ 使用 ReDim 来改变固定大小数组的元素数。 例如, 在下列的代码中, 在 NextOne 过 程中 SomeArr 接收了固定大小的数组 FixedArr , 然后试图调整 SomeArr 的大小: Sub FirstOne Dim FixedArr(25) As Integer NextOne FixedArr() End Sub Sub NextOne(SomeArr() As Integer) ReDim SomeArr(35) ... End Sub ⑵ 对模块层次动态数组,要重新确定大小,而某一个元素已经作为参数传给了过程。 例如,在下列的代码中,ModArray 是模块层次动态数组,却将其第 56 个元素以按 引用传给 Test 过程:
VISUAL STUDIO 6.0 LINK 2001常见错误解决总结

visual studio6.0link2001常见错误解决总结第一:nafxcwd.lib(appcore.obj):error LNK2001:unresolved external symbol___argvnafxcwd.lib(appcore.obj):error LNK2001:unresolved external symbol___argcnafxcwd.lib(timecore.obj):error LNK2001:unresolved external symbol__mbctype nafxcwd.lib(apphelp.obj):error LNK2001:unresolved external symbol__mbctype nafxcwd.lib(filelist.obj):error LNK2001:unresolved external symbol__mbctype解决办法:PROJECT->SETING->C/C++->PREPROCESSOR->定义_AFXDLL第二:解决外部符号错误:_main,_WinMain@16,__beginthreadex在创建MFC项目时,不使用MFC AppWizard向导,如果没有设置好项目参数,就会在编译时产生很多连接错误,如error LNK2001错误,典型的错误提示有:libcmtd.lib(crt0.obj):error LNK2001:unresolved external symbol_mainLIBCD.lib(wincrt0.obj):error LNK2001:unresolved external symbol_WinMain@161.Windows子系统设置错误,提示:libcmtd.lib(crt0.obj):error LNK2001:unresolved external symbol_mainWindows项目要使用Windows子系统,而不是Console,可以这样设置:[Project]-->[Settings]-->选择"Link"属性页,在Project Options中将/subsystem:console改成/subsystem:windows2.Console子系统设置错误,提示:LIBCD.lib(wincrt0.obj):error LNK2001:unresolved external symbol_WinMain@16控制台项目要使用Console子系统,而不是Windows,设置:[Project]-->[Settings]-->选择"Link"属性页,在Project Options中将/subsystem:windows改成/subsystem:console3.程序入口设置错误,提示:msvcrtd.lib(crtexew.obj):error LNK2001:unresolved external symbol_WinMain@16通常,MFC项目的程序入口函数是WinMain,如果编译项目的Unicode版本,程序入口必须改为wWinMainCRTStartup,所以需要重新设置程序入口:[Project]-->[Settings]-->选择"Link"属性页,在Category中选择Output,再在Entry-point symbol中填入wWinMainCRTStartup,即可4.线程运行时库设置错误,提示:nafxcwd.lib(thrdcore.obj):error LNK2001:unresolved external symbol__beginthreadex nafxcwd.lib(thrdcore.obj):error LNK2001:unresolved external symbol__endthreadex这是因为MFC要使用多线程时库,需要更改设置:[Project]-->[Settings]-->选择"C/C++"属性页,在Category中选择Code Generation,再在Use run-time library中选择Debug Multithreaded或者multithreaded其中,Single-Threaded单线程静态链接库(release版本)Multithreaded多线程静态链接库(release版本)multithreaded DLL多线程动态链接库(release版本)Debug Single-Threaded单线程静态链接库(debug版本)Debug Multithreaded多线程静态链接库(debug版本)Debug Multithreaded DLL多线程动态链接库(debug版本)单线程:不需要多线程调用时,多用在DOS环境下多线程:可以并发运行静态库:直接将库与程序Link,可以脱离MFC库运行动态库:需要相应的DLL动态库,程序才能运行release版本:正式发布时使用debug版本:调试阶段使用初学者在学习VC++的过程中,遇到的LNK2001错误的错误消息主要为:unresolved external symbol“symbol”(不确定的外部“符号”)。
VC6常见错误

VC6.0编译常见错误2010-01-01 22:39:24分类:C/C++第一部分编译错误1.error C2001: newline in constant编号:C2001直译:在常量中出现了换行。
错误分析:(1)字符串常量、字符常量中是否有换行。
(2)在这句语句中,某个字符串常量的尾部是否漏掉了双引号。
(3)在这语句中,某个字符创常量中是否出现了双引号字符“"”,但是没有使用转义符“\"”。
(4)在这句语句中,某个字符常量的尾部是否漏掉了单引号。
(5)是否在某句语句的尾部,或语句的中间误输入了一个单引号或双引号。
2.error C2015: too many characters in constant编号:C2015直译:字符常量中的字符太多了。
错误分析:单引号表示字符型常量。
一般的,单引号中必须有,也只能有一个字符(使用转义符时,转义符所表示的字符当作一个字符看待),如果单引号中的字符数多于4个,就会引发这个错误。
另外,如果语句中某个字符常量缺少右边的单引号,也会引发这个错误,例如:if (x == 'x || x == 'y') { … }值得注意的是,如果单引号中的字符数是2-4个,编译不报错,输出结果是这几个字母的ASC码作为一个整数(int,4B)整体看待的数字。
两个单引号之间不加任何内容会引发如下错误:error C2137: empty character constant。
3.error C2018: unknown character '0x##'编号:C2018直译:未知字符‘0x##’。
错误分析:0x##是字符ASC码的16进制表示法。
这里说的未知字符,通常是指全角符号、字母、数字,或者直接输入了汉字。
如果全角字符和汉字用双引号包含起来,则成为字符串常量的一部分,是不会引发这个错误的。
4.error C2041: illegal digit '#' for base '8'编号:C2141直译:在八进制中出现了非法的数字‘#’(这个数字#通常是8或者9)。
VC6编译及链接过程中常见的出错提示

Visual C++ 6.0编程环境的使用目录4 编译与链接过程中常见的出错提示 (1)4.1编译、链接问题的解决方法 (1)(1)努力读懂VC报告的错误与警告信息 (1)(2)定位问题所在行 (1)(3)解决问题的方法 (1)(4)避免被VC误导 (1)(5)编译链接问题的解决不代表程序正确 (2)4.2常用单词与术语 (2)4.3常见编译错误信息 (4)(1)error C2001: newline in constant (4)(2)error C2017: illegal escape sequence (4)(3)error C2015: too many characters in constant (4)(4)error C2137: empty character constant (5)(5)error C2018: unknown character '0x##' (5)(6)error C2041: illegal digit '#' for base '8' (5)(7)error C2065: 'xxxx' : undeclared identifier (5)(8)error C2086: 'xxxx' : redefinition (6)(9)error C2374: 'xxxx' : redefinition; multiple initialization (6)(10)error C2143: syntax error : missing ';' before (identifier) 'xxxx'或before 'type' (6)(11)error C4716: 'xxx' : must return a value (7)(12)error C2006: #include expected a filename, found '(' / found 'identifier' / found 'newline' (7)(13) error C2039: 'aver' : is not a member of 'STU' (7)(14)error C2043: illegal break (7)(15)error C2046: illegal case / error C2047: illegal default (8)(16)error C2050: switch expression not integral (8)(17)error C2051: case expression not constant (8)(18)error C2079: 'da' uses undefined struct 'data' (8)(19)error C2081: 'num2' : name in formal parameter list illegal (9)(20)error C2122: 'num2' : prototype parameter in name list illegal (9)(21)error C2082: redefinition of formal parameter 'aver' (9)(22)error C2172: 'fread' : actual parameter is not a pointer : parameter 1 (9)(23)error C2198: 'FindMin' : too few actual parameters (10)(24)error C2087: '<Unknown>' : missing subscript (10)(25)error C2133: 'num' : unknown size (10)(26)error C2106: '=' : left operand must be l-value (10)(27)error C2108: subscript is not of integral type (10)(28)error C2109: subscript requires array or pointer type (10)(29)error C2181: illegal else without matching if (11)(30)error C2296: '%' : illegal, left operand has type 'double ' (11)(31)fatal error C1004: unexpected end of file found (11)(32)fatal error C1021: invalid preprocessor command 'defint'/'hinclude' (11)(33)fatal error C1083: Cannot open include file: 'sdtio.h': No such file or directory (11)(34)error C2220: warning treated as error - no object file generated (11)4.4常见编译警告信息 (12)(1)warning C4129: 'm' : unrecognized character escape sequence (12)(2)warning C4508: 'main' : function should return a value; 'void' return type assumed (12)(3)warning C4098: 'change' : 'void' function returning a value (12)(4)warning C4700: local variable 'xxx' used without having been initialized (12)(5)warning C4013: 'print' undefined; assuming extern returning int (13)(6)warning C4047: '=' : 'int *' differs in levels of indirection from 'int ' (13)(7)warning C4024: 'fun' : different types for formal and actual parameter 2 (13)(8)warning C4133: 'function' : incompatible types - from 'int [128]' to 'char *' (13)(9)warning C4022: 'fread' : pointer mismatch for actual parameter 1 (14)(10)warning C4018: '<' : signed/unsigned mismatch (14)(11) warning C4305: '=' : truncation from 'const double ' to 'float ' (15)(12)warning C4553: '==' : operator has no effect; did you intend '='? (15)(13)warning C4715: 'fun' : not all control paths return a value (15)4.5常见链接错误 (16)(1)error LNK2001: unresolved external symbol _main (16)(2)error LNK2005: _main already defined in xxxx.obj (16)(3)fatal error LNK1168: cannot open Debug/P901.exe for writing (17)4.6T URBO C V2.0编译错误信息的英汉对照表 (17)4 编译与链接过程中常见的出错提示4.1 编译、链接问题的解决方法(1)努力读懂VC报告的错误与警告信息编译、链接过程中,主要由于初学和录入阶段的击键失误,VC经常会提示程序有错(语法和拼写问题,肯定不会指明算法有问题,否则就不用编程了)。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
VC6 各link错误解决修改浏览权限| 删除错误1:LIBCD.lib(crt0.obj) : error LNK2001: unresolved external symbol _main在project-setting-link里找到project options 去掉里面的/subsystem:console错误2:nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __endt...将工程设置为Using MFC in a static library错误3:libcmtd.lib(crt0.obj) : error LNK2001: unresolved external symbol _main在project-setting-link里找到project options 将里面的/subsystem:console 改为/subsystem:windows/////////////////////////////////////////////////////////////VC6的几个Link error修改浏览权限| 删除sega 发表于- 2005-9-30 19:56:00今天下午别人问我的,错误大概是这样:nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __endthreadexnafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __beginthreadexDebug/poisson.exe : fatal error LNK1120: 2 unresolved externalsError executing link.exe.我也不知道到底nafxcwd这个库是怎么回事,就google了一下,果然找到些东西:解决外部符号错误:_main,_WinMain@16,__beginthreadex在创建MFC项目时, 不使用MFC AppWizard向导, 如果没有设置好项目参数, 就会在编译时产生很多连接错误, 如error LNK2001错误, 典型的错误提示有:libcmtd.lib(crt0.obj) : error LNK2001: unresolved external symbol _mainLIBCD.lib(wincrt0.obj) : error LNK2001: unresolved external symbol _WinMain@16msvcrtd.lib(crtexew.obj) : error LNK2001: unresolved external symbol _WinMain@16nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __beginthreadexnafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __endthreadex下面介绍解决的方法:1. Windows子系统设置错误, 提示:libcmtd.lib(crt0.obj) : error LNK2001: unresolved external symbol _mainWindows项目要使用Windows子系统, 而不是Console, 可以这样设置:[Project] --> [Settings] --> 选择"Link"属性页,在Project Options中将/subsystem:console改成/subsystem:windows2. Console子系统设置错误, 提示:LIBCD.lib(wincrt0.obj) : error LNK2001: unresolved external symbol _WinMain@16控制台项目要使用Console子系统, 而不是Windows, 设置:[Project] --> [Settings] --> 选择"Link"属性页,在Project Options中将/subsystem:windows改成/subsystem:console3. 程序入口设置错误, 提示:msvcrtd.lib(crtexew.obj) : error LNK2001: unresolved external symbol _WinMain@16通常, MFC项目的程序入口函数是WinMain, 如果编译项目的Unicode版本, 程序入口必须改为wWinMainCRTStartup, 所以需要重新设置程序入口:[Project] --> [Settings] --> 选择"C/C++"属性页,在Category中选择Output,再在Entry-point symbol中填入wWinMainCRTStartup, 即可4. 线程运行时库设置错误, 提示:nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __beginthreadex nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __endthreadex这是因为MFC要使用多线程时库, 需要更改设置:[Project] --> [Settings] --> 选择"C/C++"属性页,在Category中选择Code Generation,再在Use run-time library中选择Debug Multithreaded或者multithreaded其中,Single-Threaded 单线程静态链接库(release版本)Multithreaded 多线程静态链接库(release版本)multithreaded DLL 多线程动态链接库(release版本)Debug Single-Threaded 单线程静态链接库(debug版本)Debug Multithreaded 多线程静态链接库(debug版本)Debug Multithreaded DLL 多线程动态链接库(debug版本)单线程: 不需要多线程调用时, 多用在DOS环境下多线程: 可以并发运行静态库: 直接将库与程序Link, 可以脱离MFC库运行动态库: 需要相应的DLL动态库, 程序才能运行release版本: 正式发布时使用debug版本: 调试阶段使用//////////////////////////////////////////////找不到secondchar的定义,你是否没有把包含secondchar的*.h或*.lib加入到你项目?以下是可能产生LNK2001错误的原因:一.由于编码错误导致的LNK2001。
1.不相匹配的程序代码或模块定义(.DEF)文件能导致LNK2001。
例如, 如果在C++源文件内声明了一变量“var1”,却试图在另一文件内以变量“VAR1”访问该变量,将发生该错误。
2.如果使用的内联函数是在.CPP文件内定义的,而不是在头文件内定义将导致LNK2001错误。
3.调用函数时如果所用的参数类型同函数声明时的类型不符将会产生LNK2001。
4.试图从基类的构造函数或析构函数中调用虚拟函数时将会导致LNK2001。
5.要注意函数和变量的可公用性,只有全局变量、函数是可公用的。
静态函数和静态变量具有相同的使用范围限制。
当试图从文件外部访问任何没有在该文件内声明的静态变量时将导致编译错误或LNK2001。
函数内声明的变量(局部变量) 只能在该函数的范围内使用。
C++的全局常量只有静态连接性能。
这不同于C,如果试图在C++的多个文件内使用全局变量也会产生LNK2001错误。
一种解决的方法是需要时在头文件中加入该常量的初始化代码,并在.CPP文件中包含该头文件;另一种方法是使用时给该变量赋以常数。
二.由于编译和链接的设置而造成的LNK20011.如果编译时使用的是/NOD(/NODEFAULTLIB)选项,程序所需要的运行库和MFC库在连接时由编译器写入目标文件模块,但除非在文件中明确包含这些库名,否则这些库不会被链接进工程文件。
在这种情况下使用/NOD将导致错误LNK2001。
2.如果没有为wWinMainCRTStartup设定程序入口,在使用Unicode和MFC 时将得到“unresolved external on _WinMain@16”的LNK2001错误信息。
3.使用/MD选项编译时,既然所有的运行库都被保留在动态链接库之内,源文件中对“func”的引用,在目标文件里即对“__imp__func” 的引用。
如果试图使用静态库LIBC.LIB或LIBCMT.LIB进行连接,将在__imp__func上发生LNK2001;如果不使用/MD选项编译,在使用MSVCxx.LIB连接时也会发生LNK2001。
4.使用/ML选项编译时,如用LIBCMT.LIB链接会在_errno上发生LNK2001。
5.当编译调试版的应用程序时,如果采用发行版模态库进行连接也会产生LNK2001;同样,使用调试版模态库连接发行版应用程序时也会产生相同的问题。
6.不同版本的库和编译器的混合使用也能产生问题,因为新版的库里可能包含早先的版本没有的符号和说明。
7.在不同的模块使用内联和非内联的编译选项能够导致LNK2001。
如果创建C++库时打开了函数内联(/Ob1或/Ob2),但是在描述该函数的相应头文件里却关闭了函数内联(没有inline关键字),这时将得到该错误信息。
为避免该问题的发生,应该在相应的头文件中用inline关键字标志内联函数。
8.不正确的/SUBSYSTEM或/ENTRY设置也能导致LNK2001。
其实,产生LNK2001的原因还有很多,以上的原因只是一部分而已,对初学者来说这些就够理解一阵子了。
但是,分析错误原因的目的是为了避免错误的发生。
LNK2001错误虽然比较困难,但是只要注意到了上述问题,还是能够避免和予以解决的。