您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 电子设计/PCB > 王牌8-扫雷英雄榜――C++常见错误及解决方案
王牌811.在源码中遗失“;”错误信息syntaxerror:missing‘;’错误示例inttest,number,test=12;解决方案找到出错的相应位置,补上‘;‘2.缺少命名空间定义错误信息errorc2065:’cout’:undeclaredidentifier错误示例#includeiostreamintmain(){cout“hello,world”endl;return0;}解决方案在主程序头,添加命名空间使用定义。usingnamespacestd;3.变量未定义直接使用错误信息errorc2065:‘xxxx’:undeclaredidentifier2错误示例intmain(){intage;cout”age:\t”ageendlcout“name:\t”nameendl;}解决方案使用一个变量必须提起声明。4.程序中使用中文标示符错误信息errorc2018:unknowncharacter‘0xa3’错误示例intage;//中文下的分号解决方案如果将英文‘;‘,错输入成’;‘找到标号错误的地方,改成英文的。5.错误地使用输入输出符错误信息errorc2676:binary‘’:’classstd:;basic_ostreamchar,atructstd::char_traitschar’doesnotdefinethisaperatororaconversiontoatypeacceptabletotheacceptabletothepredifinedoperator错误示例couta;解决方案把错误的输入输出符改成相应的,如couta,改成cina。6.变量类型不匹配错误信息王牌83waringc4305:‘initializing’:truncationfrom‘constdouble’to‘float’错误示例floatpi=3.412345245656245解决方案在给变量赋值的时候,看清变量类型。7.变量在赋值之前使用错误信息warningc4700:localvariable‘a’usedwithouthavingbeeninitialized错误示例inti,j,k;k=i+j;cinij;解决方案这种错误主要是对面向过程的程序没理解透彻,变量使用前,先初始化,对其进行赋值。8.在一个工程中出现多个main函数错误信息errorc2556:‘int_cdeclmain(void)’:overloadedfunctiondiffersonlybyreturntypefrom‘void_cdeclmain(void)’e:\tmp\tsing.cpp(4):seedeclarationof‘main’e:\tmp\bigd.cpp(15):errorc2371:‘main’:redifinition;differentbasictypes错误示例//tsing.cpp……intmain(){……}//bigd.cpp……intmain()4{……}解决方案删除另外一个main函数,一个工程只能有一个main函数。9.在函数定义后面使用分号错误信息errorC2447:missingfunctinoheader(old-styleformallist?)错误示例voidtest();{……}解决方案删除多余的分号。10.函数定义/使用/声明参数个数不匹配错误信息errorc2660:‘chang’:functiondoesnottake2parameters错误示例voidchang(inta);intmain(){……chang(1,2);}voidchang(inta,intb){……}王牌85解决方案函数声明和定义尽量放在两个文件里,以便管理参数个数和类型要用对。11.未包含指定头文件错误信息fatalerrorc1010:unexpectedendoffilewhilelookingforprecompiledheaderdirective.错误示例//CMyClass定义在MyClass.h中#includeiostreamusingnamespacestd;intmain(){……CMyClassmyClass;……}解决方案找到因为哪个函数导致未包含头文件,然后找到该函数的头文件,包含指定头文件即可。12.不能打开指定头文件错误信息fatalerrorc1083:Cannotopenincludefile:‘R…….h’Nosuchfileordirectory错误示例#include“E;\Test.h”//Test.h不在E目录下,或者名字不对解决方案指定头文件名错误,或者指定路径错误,找到该头文件的正确名字或者路径。13.类重定义6错误信息errorc2011:c……:classtyperedifinition错误示例//CMyClass.h首次定义CMyClassclassCmyClass{……}//COtherClass.h重复定义CMyClassclassCMyClass{……}解决方案出错信息说明,该类已经定义过了,所以删除对该类的定义,或者给该类换个类名。14.switch语句的case分支中使用变量错误信息errorc2057:expectedconstantexpression错误示例inta,b;switch(a){……case(b):break;……}解决方案把相应的case分支,改成常量即可。15.函数参数在函数体中重定义错误信息王牌87errorc2082:redifinitionofformalparameter‘bRet’错误示例intAdd(intval1,intval2){intval1=val1;……}解决方案在函数体内部有变量和参数名字一样,修改下函数体的局部变量的名字即可。16.句法错误:”{”前缺少“:”错误信息errorc2143:syntaxerror:missing‘:’befor‘{‘错误示例intmain(){……return0//忘记‘;’}解决方案一般是因为编程疏忽,在相应语句后面添加‘;‘。17.语法错误:‘50’该值已被使用错误信息errorC2196:casevalue'69'alreadyused。错误示例swotcj(val){case(10):……case(50):……8case(50):……}解决方案一般都是疏忽所致,删除多余的case分支。18.成员函数未声明错误信息errorC2509:'testFunc':memberfunctionnotdeclaredin'CHello'。错误示例classCHello{public:CHello();~CHello();}inttest(){CHellotest;test.testFunc();}解决方案在类内部提供该函数的声明,以及实现。19.函数重载错误错误信息errorC2555:'B::f1':overridingvirtualfunctiondiffersfrom'A::f1'onlybyreturntypeorcallingconvention错误代码classA{……public:virtualintf1(){}王牌89……}classB:publicA{……public:boolf1(){}……}解决方案函数重载只能通过参数的不同来识别,不能根据返回值来确定,所以重载函数的时候注意这一点。20.函数参数传递错误错误信息errorC2660:'test':functiondoesnottake2parameters错误代码intspt(intnum){returnnum*num;}intmain(){intresult=sqt(2,4);}解决方案传递给函数的参数和函数定义不符,调用函数的时候根据具体函数参数来传递,这样就不会出错,上面的问题只需传递一个参数就行。21.连接错误:不能打开某文件错误信息LINK:fatalerrorLNK1168:cannotopenDebug/P1.exeforwriting错误代码10无解决方案这中问题一般是因为要编译的程序正在执行,或者被其他程序调用,关闭正在执行的程序和调用该程序的程序即可。22.数组访问越界错误信息无错误代码intarr[10];for(intk=0;k10;k++)arr[k]=k;coutarr[12]endl;解决方案越界访问数组,C++编译器并不提示错误,但这是程序致命的弱点。有可能修改关键数据,所有访问数组的时候不要直接用常量标志下界。23.头文件格式不正确错误信息EERROR:wrongheaderfornamespacestd错误代码#includeiostream.husingnamespacestd;解决方案删除iostream后面的’.h’即可24.无效的操作符错误信息warningC4553:'==':operatorhasnoeffect;didyouintend'='?王牌811错误代码intmain(intargc,char**argv){if(argc=1)cout“oneparamter:”endl;if(argc=2)cout“twoparamter:”endl;return0;}解决方案疏忽所致比较运算符误写成赋值运算符,把‘=’改成‘==’。良好的编程习惯就是把比较常量作为左值。25.函数无返回值错误信息errorC4716:'test':mustreturnavalue错误代码intadd(inta,intb){cout”Addtwonumbers!”endl;}intmain(){intnRet=add(1,2);cout”Thevalueis:”nRetendl;return0;}解决方案函数原型声明为有返回值,但是在函数实现的时候忘记写返回值了,就回出现这个错误,只要按函数声明的返回类型,返回相应的值即可。26.类定义出错12错误信息newtypesmaynotbedefinedinareturnvalue,extraneous‘int’ignored,‘main’mustreturn‘int’错误代码#includeiostreamusingnamespacestd;classA{public:voidfunc(){couthelloendl;}}//此处忘记‘;’intmain(){Aa;a.func();system(PAUSE);return0;}解决方案导致原因就是在类定义介束的时候忘了‘;’,在类定义介绍的时候补上‘;’27.错误的使用指针错误信息infunciton‘intmain()’,baseoperatorof‘-’hasnon-pointertype‘Test’错误代码#includeiostreamusingnamespacestd;classTest{public:voidFunc(){coutFuncendl;}};intmain(){TesttA;tA-Func();//此处应该使用‘.’操作符。‘-’是指针操作符王牌813system(PAUSE);return0;}解决方案对于指针,操作数据成员要用‘-’操作符;对于像结构体,数组,联合等,操作数据成员要用‘.’操作符。28.类成员访问错误错误信息Infunction‘intmain()’,‘intA::age’isprivatewithinthiscontext错误代码#includeiostreamusingnamespacestd;classA{public:A(){age=0;}voidSetAge(intval
本文标题:王牌8-扫雷英雄榜――C++常见错误及解决方案
链接地址:https://www.777doc.com/doc-5373202 .html