VC6中常见错误解决
VC中常见的一些编译链接错误的解决

VC中常见的一些编译链接错误的解决VC中常见的一些编译链接错误的解决2010-03-22 15:59问题1:Linking...nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __endthreadexnafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __beginthreadexlibcd.lib(crt0.obj) : error LNK2001: unresolved external symbol _main答VC++默认的工程设置是单线程的,而你使用了多线程,所以要修改设置。
选择菜单“Project|settings”,选择C/C++标签,在CODEGENERATION分类中选择除SINGLE-THREADED的其他选择。
比如可以在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版本: 调试阶段使用问题2fatal error C1010: unexpected end of file while looking for precompiled header directive该如何解如果发生错误的文件是由其他的C代码文件添加进入当前工程而引起的,则Alt+F7进入当前工程的Settings,选择C/C++选项卡,从Category组合框中选中Precompiled Headers,选择Not Using Precompiledheaders。
VisualC++6.0无法正常启动提示0xc0000142怎么办?vc6.0无法执行程序解决方法

VisualC++6.0⽆法正常启动提⽰0xc0000142怎么办?vc6.0⽆法执⾏程序解决⽅法VC++(Visual C++) v6.0 简体绿⾊完整版类型:编译⼯具⼤⼩:35.8MB语⾔:简体中⽂时间:2021-07-06查看详情Microsoft Visual C++ 6.0 SP6 中⽂完整安装版(iso⽂件463M)类型:编程⼯具⼤⼩:463MB语⾔:简体中⽂时间:2014-08-14查看详情 vc6.0⽆法正常启动怎么办? 很多⽹友在升级Win10系统后出现vc6.0不能运⾏提⽰“应⽤程序⽆法正常启动0xc0000142”问题。
⽆法运⾏的原因是win10不兼容中⽂版的vc,解决⽅法很简单,直接⽤英⽂版的msdev.exe替换中⽂版的msdev.exe启动程序即可。
vc6.0⽆法执⾏程序解决⽅法: ⾸先下载英⽂版msdev.exe解压出来,然后找你的vc的安装⽬录。
如果你没有安装时没有更改安装路径,那就默认在C盘C:\Program Files (x86)\Microsoft Visual Studio\Common\MSDev98\Bin 这个⽬录下。
如果是绿⾊版,先找到vc总的⽬录,再按照\Common\MSDev98\Bin 这个路径来找。
直接将英⽂版的msdev.exe复制到Bin⽬录下并且覆盖。
有的同学可能是绿⾊版的vc,这种版本的vc可能为了兼容改了⽂件名,不叫msedv.exe,不⽤管,你将英⽂版复制进去之后,每次启动时启动复制进去的英⽂版就是的。
你可以右键发送⼀个快捷⽅式到桌⾯ 回到桌⾯打开刚才发送的快捷⽅式,即可成功启动vc。
写个程序并且编译⼀下,看看有没问题。
有问题可以参考下⾯的注意事项。
注意: 这⾥要注意⼀定要把它放到Bin⽬录下不然启动不了。
有同学没有放到Bin⽬录下,直接打开启动程序,显⽰丢失devshl.dll,就是没好好看步骤,没放到位置。
还有⼈会出现可能编译时会出现error spwaing cl.exe,这个错误⽹上的解决⽅法⼀⼤堆,可以⾃⼰去搜索⼀下。
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 过程:
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经常会提示程序有错(语法和拼写问题,肯定不会指明算法有问题,否则就不用编程了)。
解决VC++6.0不能使用问题

用VC++6.0时点“打开文件”时弹出“ox5003eaed”指令引用的“ox00000000”内存。
该内存不能为“read”2011-07-26 16:44问题:在Visual c + + 中使用键盘快捷键或从"文件"菜单中选择“打开”将产生以下错误:“0x5003eaed指令引用的"0x00000000"内存。
该内存不能为"read"。
要终止程序,请单击"确定"。
要调试程序,请单击"取消"。
” 的一个对话框。
当点击项目——>添加到项目——>文件时,将出现相同错误。
解决:FileTool.exe 是一个示例,用于替换“打开”和“添加到项目”菜单项在 Visual c + + 中使用开发工具 Studio 对象模型。
从 Microsoft 下载中心下载FileTool.exe :/download/vc60ent/s1/6.0/w9xnt4/en-us/filetool.exe自解压 FileTool.exe为FileTool文件夹待用。
为防止文件丢失,可将FileTool文件夹放在Visual c + + 6.0安装文件(:\Program Files\Microsoft Visual Studio)中。
一、首先安装外接程序:1. 运行 Visual c + + 6.0,文件--打开工作空间,打开刚才解压的filetool中的dsw工作空间文件编译,在DBUG文件夹中生成filetool.dll文件2.工具——>定制3.选择“附加项和宏文件”选项卡,单击浏览按钮并找到在第1 步中生成程序FileTool.dll 文件。
二、1. 工具——>定制——>键盘类别——>文件;命令——>FileOpen;编辑器——>主要;当前键——> CTRL + O ,单击“移去”:2. 类别——>工程;命令——>InsertFilesIntoProject。
filetool--VC++6.0打开文件出错--解决办法

4、在vc6.0的IDE中依次点击“Build”---“Build FileTool.dll",稍等一会就会在X:\Program Files\Microsoft Visual Studio\Common\MSDev98\AddIns\FileTool\Debug目录里面建立18个文件,其中就有FileTool.dll这个文件。
一、卸载office2007,安装2003.(其实问题的本质在于office2007的安装文件大多里面集成了补丁包,安装的时候自动运行,修改了系统的某些项目,造成vc打开文件失败。)或者是卸载office2007后从新安装,但不安装补丁,以后也不下载office的补丁,忽略掉杀毒软件的漏洞提醒。
1、到这里/kb/241396/en-us#appliesto(其实在这个网页上就有详细的解释KB241396 )下载FileTool.exe
2、下载下来后解压到vs6.0的AddIns目录,即X:\Program Files\Microsoft Visual Studio\Common\MSDev98\AddIns(X是你的vs6.0的安装目录,下同)。
ห้องสมุดไป่ตู้
补充:有时候vc不能生成.dll的文件,建议到一台正常的电脑上运行,然后再加到自己的电脑上;或者到CSDN网上直接下载FileTool.dll文件,不行留言管我要。个人以为微软仅仅是做了个第二套补救方案,拿一个小小的插件糊弄人,其实真正的问题没解决。也难怪,文件复杂了不好改,不过能用就很好了。
VC6工程升级VS2013遇到的问题

VC6工程升级VS2013遇到的问题问题1:Building an MFC project for a non-Unicode…Building an MFC project for a non-Unicode character set is deprecated解决方法:用于多字节字符编码(MBCS) 的MFC 库(DLL) 不再包含于Visual Studio 中,但是可用作插件,您可以在任何装有Visual Studio Professional、Visual Studio Premium 或Visual Studio Ultimate 的计算机上下载和安装。
(在Visual Studio 中,必须启用MFC。
)安装需要大约440 MB 磁盘空间,包括英语(美国)和DLL 的本地化版本。
在安装MBCS DLL 后,如果卸载或修复Visual Studio,则还会卸载或修复。
但是,如果只禁用MFC,MBCS DLL 仍会保留在系统上。
如果仅卸载或修复MBCS DLL,将不会修改Visual Studio。
总结下就是安装Multibyte MFC Library for Visual Studio 2013详细信息:/b/vcblog/archive/2013/07/08/mfc-support-for-mbcs-deprecated-in-visual-studio-2013. aspx下载地址:/zh-cn/download/details.aspx?id=40770问题2:warning C4996: 'MBCS…warning C4996: 'MBCS_Support_Deprecated_In_MFC': MBCS support in MFC is deprecated and may be removed in a future version of MFC.解决方法:这个链接/fwlink/p/?LinkId=279048文中提到可以通过将NO_WARN_MBCS_MFC_DEPRECATION 预处理器定义添加到您的项目生成定义消除此警告。
初学者使用VC6.0编程易错问题及解决办法

0 引言多年从事高职高专学生的C++面向对象程序设计语言教学工作,在教学中发现,由于高职高专学生基础较为薄弱及课程设置等相关问题,导致绝大部分学生在学习C++程序设计过程中,尤其是使用Microsoft Visual C++ 6.0进行程序设计时,容易出现一些常见易错问题。
C++程序设计一般来说均是高职学生接触的第一门面向对象程序设计语言,其面向对象的编程思想和方法有别于C语言以及学生常规性思维。
本文总结一些常见的初学者容易出现的错误类型,便于感兴趣的初学者借鉴使用,提高大家的学习兴趣和学习效率。
1 易错问题及解决方案1.1 头文件问题使用Microsoft Visual C++ 6.0进行C++语言程序设计不同于C的一大特点之一,C++程序设计一般都要求需要先使用#in-clude命令包含需要使用到的头文件,例如程序需要使用cin及cout输入输出命令,则需要首先包含iostream文件,否则就会编译不成功,会出现cin、cout未定义以及>>、<<类型错误的错误提示。
1.2 名字空间问题类似于头文件问题,进行C++程序编译时,需要将有关的名字空间包含进来。
例如在头文件问题阐述中,为了使用Microsoft Vi-sual C++ 6.0已经定义的输入输出语句cin、cout以及<<、>>,光是包含了头文件iostream是不够的,。
此时一样会出现cin、cout未定义以及>>、<<类型错误的错误提示。
还需要使用using namespace 命令将std名字空间包含进来,因为Microsoft Visual C++ 6.0对于cin、cout以及>>、<<的定义是放在std名字空间里面的。
1.3 多个main函数问题C++程序强调一个工程有且仅有一个主函数。
但是在实际学习和编程中,很多初学者往往习惯性在一个工程下新建多个.cpp文件,且每一个.cpp文件里面都有一个主函数。
VC++6.0中unexpected end of file while looking for precompiled header directive的解决方法

VC++6.0中"unexpected end of file while looking for precompiled header directive"的解决方法VC++6.0中常出现的"unexpected end of file while looking for precompiled header directive"的问题?如何解决:"fatal error C1010:VC++6.0中常出现的"unexpected end of file while looking for precompiled header directive"的问题?我想大家在VC6.0中经常回遇到这样的问题,如何解决呢?1、看看是否缺少“;”,“}”隐藏得深的是宏、.h文件的问题就要费点心思了2、一定是你在类的部分定义被删除了,M$在每个类中定义一些特殊的常量,是成对的,如下:.h:#if !defined(AFX_CHILDFRM_H__54CA89DD_BA94_11D4_94D7_0010B503C2EA__IN CLUDED_)#defineAFX_CHILDFRM_H__54CA89DD_BA94_11D4_94D7_0010B503C2EA__INCLUDED_ .......//{{AFX_INSERT_LOCATION}}// Microsoft Visual C++ will insert additional declarations immediately before the previous line.#endif// !defined(AFX_MAINFRM_H__54CA89DB_BA94_11D4_94D7_0010B503C2EA__INCL UDED_)你可以新建一个类,然后把这些拷贝过去或补上就可以了。
VC6的LNK2005错误

VC6的LNK2005错误使用VC编程中经常能遇到LNK2005错误——重复定义错误,其实LNK2005错误并不是一个很难解决的错误。
弄清楚它形成的原因,就可以轻松解决它了。
出现LNK2005错误有多种原因:1.重复定义全局变量。
2.头文件的包含重复。
3.使用第三方的库造成的。
这里只讨论使用第三方的库造成的原因的处理。
如果在程序中同时使用了多个函数库,并且这些函数库中有些函数名称有冲突,就会引起LNK2005错误。
微软提供了两套C运行期函数库,一种是普通的函数库:LIBC.LIB,不支持多线程。
另外一种是支持多线程的:msvcrt.lib。
如果一个工程里,这两种函数库混合使用,可能会引起这个LNK2005错误,一般情况下它需要MFC的库先于普通运行期函数库被连接,因此建议使用支持多线程的 msvcrt.lib。
通常是尽量避免这样混合使用两套函数库(LIBC.lib和MSVCRT.lib)。
如果不得不同时使用两套函数库或者其它相互有冲突的函数库,可以尝试按下面所说的方法:在编译包含zlib库文件的时候,出现以下错误:Linking...MSVCRT.lib(MSVCRT.dll) : error LNK2005: _malloc already defined in LIBCD.lib(dbgheap.obj)MSVCRT.lib(MSVCRT.dll) : error LNK2005: _sprintf already defined in LIBCD.lib(sprintf.obj)MSVCRT.lib(MSVCRT.dll) : error LNK2005: _fclose already defined in LIBCD.lib(fclose.obj)MSVCRT.lib(MSVCRT.dll) : error LNK2005: _free already defined in LIBCD.lib(dbgheap.obj)MSVCRT.lib(MSVCRT.dll) : error LNK2005: __vsnprintf already defined in LIBCD.lib(vsnprint.obj)MSVCRT.lib(MSVCRT.dll) : error LNK2005: _fflush already defined in LIBCD.lib(fflush.obj)LINK : warning LNK4098: defaultlib "MSVCRT" conflicts with use of other libs; use /NODEFAULTLIB:libraryDebug/Test.exe : fatal error LNK1169: one or more multiply defined symbols found产生的原因是一个函数在两个不同的Lib中都有导出(MSVCRTD 和LIBC有冲突),有两种办法处理:方法一: MSDN对此的解决方法是增加[/FORCE:MULTIPLE]连接选项. 这方式发现会有警告,但可以编译通过:LINK : warning LNK4075: ignoring /INCREMENTAL due to /FORCE specificationMSVCRT.lib(MSVCRT.dll) : warning LNK4006: _malloc already defined in LIBCD.lib(dbgheap.obj); second definition ignored MSVCRT.lib(MSVCRT.dll) : warning LNK4006: _sprintf already defined in LIBCD.lib(sprintf.obj); second definition ignored MSVCRT.lib(MSVCRT.dll) : warning LNK4006: _fclose already defined in LIBCD.lib(fclose.obj); second definition ignored MSVCRT.lib(MSVCRT.dll) : warning LNK4006: _free already defined in LIBCD.lib(dbgheap.obj); second definition ignored MSVCRT.lib(MSVCRT.dll) : warning LNK4006: __vsnprintf already defined in LIBCD.lib(vsnprint.obj); second definition ignoredMSVCRT.lib(MSVCRT.dll) : warning LNK4006: _fflush already defined in LIBCD.lib(fflush.obj); second definition ignoredLINK : warning LNK4098: defaultlib "MSVCRT" conflicts with use of other libs; use /NODEFAULTLIB:library方法二:添加链接选项:/NODEFAULTLIB:<library> 如:/nodefaultlib:"libcd.lib" 该方法能编译通过,并且没有警告。
在VC++6.0中编译出错时解决方法汇总

在VC++6.0中编译出错时解决方法汇总【1】missing function header (old-style formal list?)#SinaEditor_Temp_FontName 解决方法该函数的函数头后边加了分号去掉即可例如:void fun();{}就会出现那种情况【2】在编译VC++6.0是,出现fatal error C1010: unexpected end of file while looking for precompiled header directive的错误.解决方法:1、如果发生错误的文件是由其他的C代码文件添加进入当前工程而引起的,则Alt+F7进入当前工程的Settings,选择C/C++选项卡,从Category组合框中选中Precompiled Headers,选择Not Using Precompiled headers。
确定。
2、在文件开头添加:#include "stdafx.h"对预编译头文件说明如下:所谓头文件预编译,就是把一个工程(Project)中使用的一些MFC标准头文件(如Windows.H、Afxwin.H)预先编译,以后该工程编译时,不再编译这部分头文件,仅仅使用预编译的结果。
这样可以加快编译速度,节省时间。
预编译头文件通过编译stdafx.cpp生成,以工程名命名,由于预编译的头文件的后缀是“pch”,所以编译结果文件是projectname.pch。
编译器通过一个头文件stdafx.h来使用预编译头文件。
stdafx.h这个头文件名是可以在project的编译设置里指定的。
编译器认为,所有在指令#include "stdafx.h"前的代码都是预编译的,它跳过#include "stdafx. h"指令,使用projectname.pch编译这条指令之后的所有代码。
VC6升至VC2010的常见错误及处理

从VC6.0到VC2008-转自CSDN博客()一、_WIN32_WINNT 与_WIN32_IE 设置冲突_WIN32_WINNT 与_WIN32_IE设置不兼容会导致如下C1189致命错误:StdAfx.cppc:\program files\microsoft sdks\windows\v6.0a\include\sdkddkver.h(217) : fatal error C1189: #error :_WIN32_WINNT settings conflicts with _WIN32_IE settingStdAfx.cpp通常是项目中第一个编译的文件,这个错误将导致编译无法继续进行。
产生这个错误的原因是原因是_WIN32_WINNT的版本定义太老,老的VC代码对_WIN32_WINNT的典型设置是:#ifndef _WIN32_WINNT#define _WIN32_WINNT 0x0400#endif0x0400相对于VS2008所带的Plarform SDK(在文件sdkddkver.h中)中_WIN32_IE的定义来说太老了,导致不兼容,可以将其改成0x0501或更高的版本避免这个问题,如下所示:#ifndef _WIN32_WINNT#define _WIN32_WINNT 0x0501#endif也可以将这三行_WIN32_WINNT定义删除,这样就会使用Plarform SDK中的_WIN32_WINNT定义,自然就不存在不兼容问题了。
不过出于对老版本VC的兼容考虑(毕竟以后可能还要使用VC6编译代码),最好这样修改:#if _MSC_VER <= 1200 // MFC 6.0 or earlier#ifndef _WIN32_WINNT#define _WIN32_WINNT 0x0400#endif#endif二、afximpl.h文件中的语法错误MFC出现的时候STL还没有成为C++的标准,所以MFC使用一套自己的模版库,比如CArray、CList、CMap等等,这些类型声明都在afximpl.h文件中。
VC6.0常见编译错误提示附解决方法

VC6.0常见编译错误提⽰附解决⽅法编号:C2001直译:在常量中出现了换⾏。
错误分析:1.①字符串常量、字符常量中是否有换⾏。
2.②在这句语句中,某个字符串常量的尾部是否漏掉了双引号。
3.③在这语句中,某个字符创常量中是否出现了双引号字符“"”,但是没有使⽤转义符“\"”。
4.④在这句语句中,某个字符常量的尾部是否漏掉了单引号。
5.⑤是否在某句语句的尾部,或语句的中间误输⼊了⼀个单引号或双引号。
编号:C2015直译:字符常量中的字符太多了。
错误分析:单引号表⽰字符型常量。
⼀般的,单引号中必须有且只能有⼀个字符(使⽤转义符时,转义符所表⽰的字符当作⼀个字符看待),如果单引号中的字符数多于4个,就会引发这个错误。
另外,如果语句中某个字符常量缺少右边的单引号,也会引发这个错误,例如:if (x == 'x || x == 'y') { … }值得注意的是,如果单引号中的字符数是2-4个,编译不报错,输出结果是这⼏个字母的ASC码作为⼀个整数(int,4B)整体看待的数字。
编号:C2137直译:空的字符定义。
错误分析:原因是连⽤了两个单引号,⽽中间没有任何字符,这是不允许的。
编号:C2018直译:未知字符‘0x##'。
错误分析:0x##是字符ASC码的16进制表⽰法。
这⾥说的未知字符,通常是指全⾓符号、字母、数字,或者直接输⼊了汉字。
如果全⾓字符和汉字⽤双引号包含起来,则成为字符串常量的⼀部分,是不会引发这个错误的。
编号:C2141直译:在⼋进制中出现了⾮法的数字‘#'(这个数字#通常是8或者9)。
错误分析:如果某个数字常量以“0”开头(单纯的数字0除外),那么编译器会认为这是⼀个8进制数字。
例如:“089”、“078”、“093”都是⾮法的,⽽“071”是合法的,等同于是进制中的“57”。
编号:C2065直译:标识符“xxxx”未定义。
错误分析:⾸先,解释⼀下什么是标识符。
为什么VC6.0老是报错

说明及下载 /blog/static/93512200922204216647/
为什么有时VC++出错计算机等级考试
有没有遇到过这种情况,VC++在它所在目录运行得好好的,在另外的目录使用时却出问题.
可能原因;可能是你安装VC++时有一个对话框中有一可选项"注册环境变量"(用英文写的) 你没有勾选就点了确定(注册环境变量的作用好像是配置正确的安装位置信息,注册后可以使用命令启动VC++)
有一步会出现一个对话框说VC6C覆盖安装,点"是"覆盖(也许VSS对于只将VC++作为C编译环境用用,不开发项目的人来说可能没多大意义,但这里,你怎么选都是会安装的(可能前面你选自定义安装去掉此项可以不安装,但会不公出总问题本人不清楚,还不如直接选其默认安装,省去不必要的麻烦)
)
基本就这些要注意地方了.
如果你之前装过这个版本的,由于有问题卸载了,再装这个时前面会有一点不同.
首选是要你选择要安装什么,有四项,默认选了第一项,(安装组件),其它步骤差不多.
你在用VC编译一个C语言程序时是否遇到过这样的问题:
总是出现"文件名.OBJ - 1 error(s), 0 warning(s)"即有一个错误.
我下载了多个版本的VC++6.0都不能完美的解决问题。
今天终于找到了一个省事省力的完整绿色版(不像那些精简版,我装企业版,占用150几M,这个有192M,可以看出组件很完整),它不仅目录信息完整(这样才可以正常编译)而且省去了菜鸟看上去有点复杂难懂的安装过程!【使用方法】
VC6.0打开文件以及向工程中添加文件时程序崩溃自动退出解决方法

VC6.0打开⽂件以及向⼯程中添加⽂件时程序崩溃⾃动退出解决⽅法换了⼀台电脑,vc6.0程序中,点击打开⽂件以及向⼯程中添加⽂件时,程序竟然崩溃⾃动退出了。
不知什么原因,安装相同的vc程序,本本竟然出现此缘故。
但是这个操作⼜是⾃⼰经常⽤到的,所以不得不解决。
与上⼀台电脑不同的是,此电脑是win7系统,⽽上⼀个则是xp系统。
此电脑office是2010版本,⽽上⼀个则是WPS;于是乎,在⽹上查资料,来解决。
看到⽹上也有类似的问题,有的说是win7系统原因,有的说是office2007版本缘故,有的说是viso缘故。
总之,这⼏种说法,我都符合。
win7系统+office源码。
所以把⽹上解决⽅案,转过来,⽅便⼤家查询。
因为vc6.0程序,有英⽂版本和中⽂版本,以下的解决⽅案是英⽂版本的,意思就是英⽂的菜单,若有个别处,我会解析之。
需要下载⽂件FileTool,或者我已经上传资源中,同样可以下载。
下⾯是百度⽂库中的解决⽅案,按照下⾯的⽅式,我的问题已经解决。
1.下载FileTool.exe,并解压2.打开VC6.0,点击File-Open Workspace,选择刚解压出来的FileTool.dsw,并确定3.点击Bulid-Build FileTool.dll,⽣成FileTool.dll⽂件4.把⽣成的FileTool.dll⽂件拷贝到合适的地⽅(避免误删),在VC6.0中点击Tools-Customize5.在出现的“Customize”对话框中,点击Add-Ins and Macro Files标签6.点击Browse,定位刚才⽣成的dll⽂件,点击确定,然后点击OK保存设置7.此时VC中会出现⼀个上⾯只有两个图标的⼯具栏,点击其右上⾓的“X”按钮将其关闭,然后关闭VC6.0并重新启动程序8.还是在VC6.0中点击Tools-Customize(中⽂版本:⼯具——定制)9.在Customize对话框中点击Keboard标签(中⽂版本:定制对话框——键盘)10.从Category的下拉菜单框中选择File(中⽂版本:类别选项——⽂件)11.在Commands窗⼝中选择FileOpen(中⽂版本:命令选项——FileOpen)12.在Current keys窗⼝中选择CTRL+O条⽬,并点击Remove(中⽂版本:右边当前键[U]——选择Ctrol+o,点击移去)13.从Category的下拉菜单框中选择Project(中⽂版本:类别——Project)14.在Commands窗⼝中选择InsertFilesIntoProject,如果之前给它注册了快捷键,则按照上⾯所说步骤移除之,默认情况下它是没有快捷键的(中⽂版本:命令——InsertFilesIntoProject)15.从Category的下拉菜单框中选择Add-Ins(中⽂版本:类别——Add—Ins)16.这时Commands窗⼝中应该已经多出了AddFileToProject和OpenFile两个条⽬,可以给它们分配快捷键了,选择OpenFile 条⽬,然后点击Press New Shortcut Key输⼊框,按下想设置的快捷键或快捷键组合(如打开⽂件默认的快捷键CTRL+O),点击Assign可以以同样的⽅法为其它的命令设置快捷键:最后,还应该在菜单栏内做相应的改动,移除⽆法使⽤的旧Open命令,换上新的:1.在VC6.0中点击Tools-Customize2.点击File菜单,并将弹出菜单中的Open命令拖拽⾄弹出菜单之外并释放(注意:别拖到其他的菜单中,个⼈建议:直接拖到定制窗⼝中,就可以释放啦。
c程序调试方法以及常见错误

目录使用VC6.0对C语言程序进行调试的基本手段 (2)(1)设置固定断点或临时断点 (2)(2)单步执行程序 (2)(3)使用断言 (3)(4)与调试相关的操作菜单:Build菜单 (4)(5)与调试相关的操作菜单:Debug菜单 (4)VC6.0常见编译错误提示 (6)(1)error C2001: newline in constant (6)(2)error C2015: too many characters in constant (6)(3)error C2137: empty character constant (6)(4)error C2018: unknown character '0x##' (6)(5)error C2041: illegal digit '#' for base '8' (6)(6)error C2065: 'xxxx' : undeclared identifier (7)(7)error C2086: 'xxxx' : redefinition (7)(8)error C2374: 'xxxx' : redefinition; multiple initialization (7)(9)C2143: syntax error : missing ';' before (identifier) 'xxxx' (8)(10)error C4716: 'xxx' : must return a value (8)(11) warning C4508: 'main' : function should return a value; 'void' return typeassumed (8)(12)warning C4700: local variable 'xxx' used without having been initialized (8)VC60.0常见链接错误 (10)(1)error LNK2001: unresolved external symbol _main (10)(2)error LNK2005: _main already defined in xxxx.obj (10)使用VC6.0对C语言程序进行调试的基本手段(1)设置固定断点或临时断点所谓断点,是指定程序中的某一行,让程序运行至该行后暂停运行,使得程序员可以观察分析程序的运行过程中的情况。
Visual C++6.0 中fatal error C1083和Error spawning cl.exe 错误的解决办法

Visual C++6.0中fatal error C1083和Error spawningcl.exe错误的解决办法最近在做VC开发的过程中遇到了这个烦人的问题,查阅了很多资料也没有一个统一的说法,所以把所有可能出现的情况都总结一下,供以后参考。
症状:fatal error C1083:Cannot open compiler intermediate file:“C:\WINDOWS\Temp\xxxx”No such file or directory或致命错误C1083:无法打开编译器中间文件:<tmp目录>;\<tmpfile>:没有的文件或目录原因之一:有可能是环境变量设置不对。
user用户变量和system变量TEMP 和TMP的变量值都为%SystemRoot%\TEMP,在正常机器上,这是没有问题的,但是有的用户机器的系统盘是手动更改成C盘的,本来应该为E盘。
解决办法:将user用户变量和system变量TEMP和TMP的变量值都改为C:\WINDOWS\Temp原因之二:和预编译头的设置有关。
解决办法:打开Settings对话框,左边的Settings For中选中Release,底下的TreeView中选中StdAfx.cpp,右边选中C/C++标签页,Category选Precompiled Headers,底下选Create precompiled header,Through header 填StdAfx.h。
左边的TreeView中依次选中工程中其他所有的cpp,Precompiled Headers都选中Use precompiled header file,Through header填StdAfx.h。
最后,“OK”、“Rebuild All”。
原因三:该错误是由TMP环境变量的末尾分号引起的。
例如:TMP=C:\TMP;解决办法:从命令行设置TMP环境变量正确方法是,如下所示:C:\>SET TMP=C:\TMP非常重要的环境字符串不能结束用分号(;),因为编译器将中间文件名追加到TMP路径。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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 character constant。
3.error C2018: unknown character '0x##'编号:C2018直译:未知字符…0x##‟。
错误分析:0x##是字符ASC码的16进制表示法。
这里说的未知字符,通常是指全角符号、字母、数字,或者直接输入了汉字。
如果全角字符和汉字用双引号包含起来,则成为字符串常量的一部分,是不会引发这个错误的。
4.error C2041: illegal digit '#' for base '8'编号:C2141直译:在八进制中出现了非法的数字…#‟(这个数字#通常是8或者9)。
错误分析:如果某个数字常量以“0”开头(单纯的数字0除外),那么编译器会认为这是一个8进制数字。
例如:“089”、“078”、“093”都是非法的,而“071”是合法的,等同于是进制中的“57”。
5.error C2065: 'xxxx' : undeclared identifier编号:C2065直译:标识符“xxxx”未定义。
错误分析:首先,解释一下什么是标识符。
标志符是程序中出现的除关键字之外的词,通常由字母、数字和下划线组成,不能以数字开头,不能与关键字重复,并且区分大小写。
变量名、函数名、类名、常量名等等,都是标志符。
所有的标志符都必须先定义,后使用。
标志符有很多种用途,所以错误也有很多种原因。
(1)如果“xxxx”是一个变量名,那么通常是程序员忘记了定义这个变量,或者拼写错误、大小写错误所引起的,所以,首先检查变量名是否正确。
(关联:变量,变量定义)(2)如果“xxxx”是一个函数名,那就怀疑函数名是否没有定义。
可能是拼写错误或大小写错误,当然,也有可能是你所调用的函数根本不存在。
还有一种可能,你写的函数在你调用所在的函数之后,而你有没有在调用之前对函数原形进行申明。
(关联:函数申明与定义,函数原型)(3)如果“xxxx”是一个库函数的函数名,比如“sqrt”、“fabs”,那么看看你在cpp文件已开始是否包含了这些库函数所在的头文件(.h文件)。
例如,使用“sqrt”函数需要头文件math.h。
如果“xxxx”就是“ci n”或“cout”,那么一般是没有包含“iostream.h”。
(关联:#include,cin,cout)(4)如果“xxxx”是一个类名,那么表示这个类没有定义,可能性依然是:根本没有定义这个类,或者拼写错误,或者大小写错误,或者缺少头文件,或者类的使用在申明之前。
(关联:类,类定义)(5)标志符遵循先申明后使用原则。
所以,无论是变量、函数名、类名,都必须先定义,后使用。
如使用在前,申明在后,就会引发这个错误。
(6)C++的作用域也会成为引发这个错误的陷阱。
在花括号之内变量,是不能在这个花括号之外使用的。
类、函数、if、do(while)、for所引起的花括号都遵循这个规则。
(关联:作用域)(7)前面某句语句的错误也可能导致编译器误认为这一句有错。
如果你前面的变量定义语句有错误,编译器在后面的编译中会认为该变量从来没有定义过,以致后面所有使用这个变量的语句都报这个错误。
如果函数申明语句有错误,那么将会引发同样的问题。
6.error C2086: 'xxxx' : redefinition编号:C2374直译:“xxxx”重复申明。
错误分析:变量“xxxx”在同一作用域中定义了多次。
检查“xxxx”的每一次定义,只保留一个,或者更改变量名。
7.error C2374: 'xxxx' : redefinition; multiple initialization编号:C2374直译:“xxxx”重复申明,多次初始化。
错误分析:变量“xxxx”在同一作用域中定义了多次,并且进行了多次初始化。
检查“xxxx”的每一次定义,只保留一个,或者更改变量名。
8.C2143: syntax error : missing ';' before (identifier) 'xxxx'编号:C2143直译:在(标志符)“xxxx”前缺少分号。
错误分析:这是VC6的编译期最常见的误报,当出现这个错误时,往往所指的语句并没有错误,而是它的上一句语句发生了错误。
其实,更合适的做法是编译器报告在上一句语句的尾部缺少分号。
上一句语句的很多种错误都会导致编译器报出这个错误:(1)上一句语句的末尾真的缺少分号。
那么补上就可以了。
(2)上一句语句不完整,或者有明显的语法错误,或者根本不能算上一句语句(有时候是无意中按到键盘所致)。
(3)如果发现发生错误的语句是cpp文件的第一行语句,在本文件中检查没有错误,而且这个文件使用双引号包含了某个头文件,那么检查这个头文件,在这个头文件的尾部可能有错误。
9.error C2137: empty character constant编号:C2137直译:空的字符定义。
错误分析:原因是连用了两个单引号,而中间没有任何字符。
一般的,单引号表示字符型常量,单引号中必须有,也只能有一个字符(使用转义符时,转义符所表示的字符当作一个字符看待)。
两个单引号之间不加任何内容是不允许的。
需要注意的是:如果单引号中的字符数是2-4个,编译不报错,输出结果是这几个字母的ASC码作为一个整数(int,4B)整体看待的数字。
如果单引号中的字符数多于4个,会引发2015错误:error C2015: too many characters in constant。
10.error C2374: 'xxxx' : redefinition; multiple initialization编号:C2374直译:“xxxx”重复申明,多次初始化。
错误分析:变量“xxxx”在同一作用域中定义了多次,并且进行了多次初始化。
检查“xxxx”的每一次定义,只保留一个,或者更改变量名。
第二部分链接错误1.error LNK2001: unresolved external symbol _main编号:LNK2001直译:未解决的外部符号:_main。
错误分析:缺少main函数。
看看main的拼写或大小写是否正确。
2.error LNK2005: _main already defined in xxxx.obj编号:LNK2005直译:_main已经存在于xxxx.obj中了。
错误分析:直接的原因是该程序中有多个(不止一个)main函数。
这是初学C++的低年级同学在初次编程时经常犯的错误。
这个错误通常不是你在同一个文件中包含有两个main函数,而是在一个project(项目)中包含了多个cpp文件,而每个cpp文件中都有一个main函数。
引发这个错误的过程一般是这样的:你写完成了一个C++程序的调试,接着你准备写第二个C++文件,于是你可能通过右上角的关闭按钮关闭了当前的cpp文件字窗口(或者没有关闭,这一操作不影响最后的结果),然后通过菜单或工具栏创建了一个新的cpp文件,在这个新窗口中,程序编写完成,编译,然后就发生了以上的错误。
原因是这样的:你在创建第二个cpp文件时,没有关闭原来的项目,所以你无意中新的cpp文件加入你上一个程序所在的项目。
切换到“File View”视图,展开“Source Files”节点,你就会发现有两个文件。
在编写C++程序时,一定要理解什么是 Workspace、什么是Project。
每一个程序都是一个Project(项目),一个Project可以编译为一个应用程序(*.exe),或者一个动态链接库(*.dll)。
通常,每个Project下面可以包含多个.cpp文件,.h文件,以及其他资源文件。
在这些文件中,只能有一个main 函数。
初学者在写简单程序时,一个Project中往往只会有一个cpp文件。
Workspace(工作区)是Project的集合。
在调试复杂的程序时,一个Workspace可能包含多个Project,但对于初学者的简单的程序,一个Workspace往往只包含一个Project。
当完成一个程序以后,写另一个程序之前,一定要在“File”菜单中选择“Cl ose Workspace”项,已完全关闭前一个项目,才能进行下一个项目。
避免这个错误的另一个方法是每次写完一个C++程序,都把VC6彻底关掉,然后重写打开VC6,写下一个程序。