VC6.0编译错误解决方法集锦
VC6.0编译错误解决方法集锦

VC6.0编译错误解决方法集锦windows编程2010-05-08 21:14:39 阅读83 评论0 字号:大中小订阅VC6.0编译错误解决方法集锦最近打算学习一下网络编程,而大部分socket编程环境都是Unix的,很是不便,在windows中总是不能编译,特寻得一篇文章解决此痒。
爽哉、爽哉!linking... server.obj : error lnk2001: unresolved external symbolserver.obj : error lnk2001: unresolved external symbol server.obj : error lnk2001: unresolved external symbolserver.obj : error lnk2001: unresolved external symbolserver.obj : error lnk2001: unresolved external symbolserver.obj : error lnk2001: unresolved external symbol server.obj : error lnk2001: unresolved external symbolserver.obj : error lnk2001: unresolved external symbolserver.obj : error lnk2001: unresolved external symbolserver.obj : error lnk2001: unresolved external symbolserver.obj : error lnk2001: unresolved external symbolserver.obj : error lnk2001: unresolved external symbolserver.obj : error lnk2001: unresolved external symbolserver.obj : error lnk2001: unresolved external symbolserver.obj : error lnk2001: unresolved external symbol原因和解决办法:找不到相应函数,问题是Link选项里没有加入相应的lib库,winsock要连接wsock32.lib。
第三章 VC++ 6.0常见编译错误

第三章 VC++ 6.0常见编译错误[错误类型1]error C2143: syntax error : missing ';' before identifier 'scanf'语法错误:在'scanf'之前缺少“;”出错实例: int nscanf(“%d”, &n);[错误类型2]error C2065: 'A' : undeclared identifier标识符A未声明出错实例:int a;scanf(“%d”, &A);[错误类型3]error C2065: 'sqrt' : undeclared identifier标识符sqrt未定义(原因:未包含<math.h>)[错误类型4]error C2296: '%' : illegal, left operand has type 'float'error C2297: '%' :illegal, right operand has type 'float'非法, '%'运算符的左右操作数不是整型出错实例:float a = 10, b = 2;printf(“%d\n”, a % b);[错误类型5]error C2440: '=' : cannot convert from 'char [2]' to 'char'不能将字符串转换成字符出错实例:char ch;ch = “a”;[错误类型6]error C2181: illegal else without matching ifelse子句没有匹配的if[错误类型7]error C2196: case value '1' already usedcase 1: 已经被使用(原因:有相同的case 常量)[错误类型8]error C2078: too many initializers初始化值太多出错实例:int a[5] = {1, 2, 3, 4, 5, 6};[错误类型9]error C2105: '++' needs l-value++运算只能作用于左值(常量不能作左值)出错实例:int a[]= {1, 2, 3, 4, 5};int *pa = ++a; // 数组名是地址常量,不能作左值[错误类型10]error C2117: 'Hello' : array bounds overflow数组边界溢出出错实例:char str[5] = "Hello";[错误类型11]error C4716: 'Function' : must return a value函数Function()必须返回一个值出错实例:int Function(int n) // 函数定义,返回值类型:int 类型 {…………return; // 不返回值,语法错误,应为:return 表达式;}[错误类型12]error C2562: 'Function' : 'void' function returning a value无返回值的函数Function()返回了一个值出错实例:void Function(int n) // 函数定义,无返回值{…………return (n % 10); // 有返回值,语法错误,应为:return;}[错误类型13]error C2447: missing function header (old-style formal list?)缺少函数头出错实例:void Function(int n); // 都是“;”惹的祸{………return;}[错误类型14]error C2082: redefinition of formal parameter 'n'重定义了参数n出错实例:void Function(int n){int m, n; // 局部变量n与参数n同名return;}[错误类型15]error C2601: 'Function' : local function definitions are illegal 函数Function()定义是非法的(原因:出现嵌套定义)[错误类型16]error C2065: 'Function' : undeclared identifier函数Function()未声明(原因:先使用后声明或定义)。
Visual_C++_6.0常见编译错误信息

Visual C++ 6.0常见的编译错误信息1、error C2018: unknown character '0xa1'不认识的字符'0xa1'。
(一般是汉字或中文标点符号)2、error C2057: expected constant expression希望是常量表达式。
(一般出现在switch语句的case分支中)3、error C2065: 'I……' : undeclared identifier“I……”:未声明过的标识符。
4、error C2146: syntax error : missing ';'语法错误:丢了“;”。
10、error C2196: case value '69' already used值69已经用过。
(一般出现在switch语句的case分支中)13、error C2555: 'B::f1': overriding virtual function differs from 'A::f1' only by return type or calling convention类B对类A中同名函数f1的重载仅根据返回值或调用约定上的区别。
14、error C2660: 'SetTimer' : function does not take 2 parameters“SetTimer”函数不传递2个参数。
15、warning C4035: 'f……': no return value“f……”的return语句没有返回值。
16、warning C4553: '= =' : operator has no effect; did you intend '='?没有效果的运算符“= =”;是否改为“=”?17、warning C4700: local variable 'bReset' used without having been initialized局部变量“bReset”没有初始化就使用。
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
VC++6.0在win7下的安装方法以及因为在其他位置安装过VC++6.0而导致的编译错误解决办法(整理)

确实,想在Windows7或者Vista下使用这个,古老但是经典的Visual C++ 6.0 编程工具,是比较麻烦的,但偶因为专业的缘故又不得不使用Visual C++ 6.0 ,于是开始慢慢探索解决的方法。
一开始在Win7下用Visual C++编程我是用的Vmware里运行XP,然后再在虚拟XP里安装Visual C++ 6.0实现的,但是用久了就发现了问题,虚拟机里用Visual C++ 6.0编译才几次,VC6就“崩溃”了,要用任务管理器强行终止!但是一学期快过去了,经过长久的探索与Google,本人终于实现了,在Windows7下直接安装Visual C++ 6.0,并且在Win7的“标准用户”环境下完成了一个C语言的链表编译运行!(由于有1100多字就不列出来了,下面会给大家看看一个简单的程序编写效果的截图)。
虽然有些古怪兼容性的提示,但是偶发现在Win7下用Visual C++ 6.0 竟然比XP还要稳定。
我是有感受的——在XP(物理机下——就是你平常直接使用电脑)下用VC6对一个C程序反复的编译,即使程序是对的,编译不了15下,VC6就“崩溃”了,但是在Win7下对一个C程序反复的编译,即使程序是错的,就是编译25次,VC6也不会“崩溃”。
不扯谈了,下面步入正题。
在Windows7下安装或者使用Visual C++ 6.0要注意三大点。
1.在安装或者使用Visual C++ 6.0时,凡是出现兼容性问题提示对话框,一律按以下方式处理——把“不再显示此消息”打上勾,然后选择“运行程序”。
不要怕,本人亲自验证过没有任何“副作用”。
2.在安装VC的时候,选择“custom(自定义安装)”:接下来就要,注意了——不要选择TOOLS里面的OLE/COM OBJECT VIEWER工具,就可以顺利安装,另外,这个只是个查看工具,不会影响VC++的编译,所以大家以后可以尽情得使用vista和win7啦,不用再担心兼容性的问题。
Visual_c++6.0常见错误提示汇总

Visual C++6.0 编译错误提示汇总1、fatal error C1010: unexpected end of file while looking for precompiled header directive。
寻找预编译头文件路径时遇到了不该遇到的文件尾。
(一般是没有#include "stdafx.h")2、fatal error C1083: Cannot open include file: 'R…….h': No such file or directory不能打开包含文件“R…….h”:没有这样的文件或目录。
3、error C2011: 'C……': 'class' type redefinition类“C……”重定义。
4、error C2018: unknown character '0xa3'不认识的字符'0xa3'。
(一般是汉字或中文标点符号)5、error C2057: expected constant expression希望是常量表达式。
(一般出现在switch语句的case分支中)6、error C2065: 'IDD_MYDIALOG' : undeclared identifier “IDD_MYDIALOG”:未声明过的标识符。
7、error C2082: redefinition of formal parameter 'bReset'函数参数“bReset”在函数体中重定义。
8、error C2143: syntax error: missing ':' before '{'句法错误:“{”前缺少“;”。
9、error C2146: syntax error : missing ';' before identifier 'dc' 句法错误:在“dc”前丢了“;”。
VC++6.0在电脑上的兼容性以及编译出错处理方法大全

VC6.0打开或者添加工程文件崩溃的解决方法很多学习编程的同学都遇到这样的问题,在Windows操作系统下使用Visual C++ 6.0编程时,如果点击菜单中的【打开】或者【添加】,或者按快捷键,都会弹出下图的对话框,出现程序崩溃并退出的情况。
出现这种问题的原因是VC6.0和其他软件冲突所致,网上一般认为是和Office2007或者Office2010冲突,有人说是和Office里的vosio冲突,但是经过检查发现卸载vosio之后问题依旧存在,也有人说是需要重装系统或者重新安装软件,但是这些方法均不可行。
其实这是微软的一个bug,微软官方对于这个问题给出了官方的解决方案(原文地址为/kb/241396/en-us)。
根据官方给出的方法,我们要用一个专门的插件来修复这个bug。
以下便是具体步骤:首先要下载所需的插件filetool.exe,Microsoft微软官方的下载地址为/download/vc60ent/s1/6.0/w9xnt4/en-us/filetool.exe。
下载得到一个.exe的自解压文件,双击或者右键解压,得到一个文件夹,里面包含filetool的项目文件,如下图。
找到FileTool.dsw文件(上图红色框中的文件),双击打开,进入Visual C++ 6.0之后,点击快捷菜单栏中的红色叹号进行编译,弹出下图所示创建文件的对话框,选【是】,弹出下图所示的调试对话框,直接点【取消】,这时编译完成,FileTool文件夹中多了一些文件,打开DeBug子文件夹,找到FileTool.dll 文件,如下图,将此文件复制粘贴到C:\Program Files\Microsoft Visual Studio\COMMON\MSDev98\AddIns路径下,如果你安装软件时自定义了common文件夹的路径,则要找到你自定义的路径,将其放进去。
放好FileTool.dll文件后,打开VC6软件,在【工具】(Tools)菜单中点击【定制…】(Customize),如下图找到【附加项和宏文件】(Add-Ins and Macro Files)选项卡,勾选其中的【File Tool Developer Studio Add-in】,(如果其中没有这一项,则可以点击浏览按钮,自己手动找到刚才得到的filetool.dll文件。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
VC6.0编译错误解决方法集锦windows编程2010-05-08 21:14:39 阅读83 评论0 字号:大中小订阅VC6.0编译错误解决方法集锦最近打算学习一下网络编程,而大部分socket编程环境都是Unix的,很是不便,在windows中总是不能编译,特寻得一篇文章解决此痒。
爽哉、爽哉!linking... server.obj : error lnk2001: unresolved external symbolserver.obj : error lnk2001: unresolved external symbol server.obj : error lnk2001: unresolved external symbolserver.obj : error lnk2001: unresolved external symbolserver.obj : error lnk2001: unresolved external symbolserver.obj : error lnk2001: unresolved external symbol server.obj : error lnk2001: unresolved external symbolserver.obj : error lnk2001: unresolved external symbolserver.obj : error lnk2001: unresolved external symbolserver.obj : error lnk2001: unresolved external symbolserver.obj : error lnk2001: unresolved external symbolserver.obj : error lnk2001: unresolved external symbolserver.obj : error lnk2001: unresolved external symbolserver.obj : error lnk2001: unresolved external symbolserver.obj : error lnk2001: unresolved external symbol原因和解决办法:找不到相应函数,问题是Link选项里没有加入相应的lib库,winsock要连接wsock32.lib。
特定库的找到办法是看LNK2001中找不到的函数名,通过msdn或者其他手段获取这个函数所在的库名,链接进去就OK了。
可以在project->setting->Link->object/library modules 里添加wsock32.lib,也可在stdafx.cpp 里添加#pragma comment(lib,"wsock32.lib")一般来说, 这是工程的类型选择错误引起的.如在VC中, 1.本来应该选择"Win32 Console Application",而错误选择了"Win32 Application" 2.使用了MFC的类,而选择"工程"的"设置"不使用MFC库编译. 改正的方法有: 1. 选择"工程"-> "设置"-> 连接,在底部的编辑窗口中,找到"/subsystem",把其改成"/subsystem:console" "/subsystem:windows". 2.在"工程"-> "设置"->"一般"选项中,在MFC项中改为"USEMFC AS A SHARED DLL".用VC++时经常会遇到链接错误LNK2001,该错误非常讨厌,因为对于编程者来说,最好改的错误莫过于编译错误,而一般说来发生连接错误时,编译都已通过。
产生连接错误的原因非常多,尤其LNK2001错误,常常使人不明其所以然。
如果不深入地学习和理解VC++,要想改正连接错误LNK2001非常困难。
初学者在学习VC++的过程中,遇到的LNK2001错误的错误消息主要为:unresolved external symbol “symbol”(不确定的外部“符号”)。
如果连接程序不能在所有的库和目标文件内找到所引用的函数、变量或标签,将产生此错误消息。
一般来说,发生错误的原因有两个:一是所引用的函数、变量不存在、拼写不正确或者使用错误;其次可能使用了不同版本的连接库。
以下是可能产生LNK2001错误的原因:一.由于编码错误导致的LNK2001。
1.不相匹配的程序代码或模块定义(.DEF)文件能导致LNK2001。
例如, 如果在C++源文件内声明了一变量“var1”,却试图在另一文件内以变量“VAR1”访问该变量,将发生该错误。
2.如果使用的内联函数是在.CPP文件内定义的,而不是在头文件内定义将导致LNK2001错误。
3.调用函数时如果所用的参数类型同函数声明时的类型不符将会产生LNK2001。
4.试图从基类的构造函数或析构函数中调用虚拟函数时将会导致LNK2001。
5.要注意函数和变量的可公用性,只有全局变量、函数是可公用的。
静态函数和静态变量具有相同的使用范围限制。
当试图从文件外部访问任何没有在该文件内声明的静态变量时将导致编译错误或LNK2001。
函数内声明的变量(局部变量) 只能在该函数的范围内使用。
C++的全局常量只有静态连接性能。
这不同于C,如果试图在C++的多个文件内使用全局变量也会产生LNK2001错误。
一种解决的方法是需要时在头文件中加入该常量的初始化代码,并在.CPP文件中包含该头文件;另一种方法是使用时给该变量赋以常数。
二.由于编译和链接的设置而造成的LNK2001 1.如果编译时使用的是/NOD(/NODEFAULTLIB)选项,程序所需要的运行库和MFC库在连接时由编译器写入目标文件模块,但除非在文件中明确包含这些库名,否则这些库不会被链接进工程文件。
在这种情况下使用/NOD将导致错误LNK2001。
2.如果没有为wWinMainCRTStartup设定程序入口,在使用Unicode和MFC 时将得到“unresolved external on ”的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错误虽然比较困难,但是只要注意到了上述问题,还是能够避免和予以解决的。
1、fatal error C1010: unexpected end of file while looking for precompiled header directive。
寻找预编译头文件路径时遇到了不该遇到的文件尾。
(一般是没有#include "stdafx.h")2、fatal error C1083: Cannot open include file: 'R…….h': No such file or directory不能打开包含文件“R…….h”:没有这样的文件或目录。
3、error C2011: 'C……': 'class' type redefinition类“C……”重定义。
4、error C2018: unknown character '0xa3'不认识的字符'0xa3'。
(一般是汉字或中文标点符号)5、error C2057: expected constant expression希望是常量表达式。
(一般出现在switch语句的case分支中)6、error C2065: 'IDD_MYDIALOG' : undeclared identifier“IDD_MYDIALOG”:未声明过的标识符。
7、error C2082: redefinition of formal parameter 'bReset'函数参数“bReset”在函数体中重定义。
8、error C2143: syntax error: missing ':' before '{'句法错误:“{”前缺少“;”。
9、error C2146: syntax error : missing ';' before identifier 'dc'句法错误:在“dc”前丢了“;”。
10、error C2196: case value '69' already used值69已经用过。
(一般出现在switch语句的case分支中)编程中经常能遇到LNK2005错误——重复定义错误,其实LNK2005错误并不是一个很难解决的错误。
弄清楚它形成的原因,就可以轻松解决它了。
造成LNK2005错误主要有以下几种情况:1.重复定义全局变量。
可能存在两种情况:A、对于一些初学编程的程序员,有时候会以为需要使用全局变量的地方就可以使用定义申明一下。