当前位置:首页 > VC6编译与链接过程中常见的出错提示
本错误(error C2143: syntax error : missing ';' before 'type')的出现:
{
int num1;
printf(\ int num2; }
将以上代码调整如下即可消除本错误:
{
int num1; int num2;
printf(\}
④如果发现发生错误的语句是cpp文件的第一行语句,在本文件中检查没有错误,但其使用双引号包含了某个头文件,那么检查这个头文件,在这个头文件的尾部可能有错误。
(11)error C4716: 'xxx' : must return a value 直译:“xxx”必须返回一个值。
错误分析:函数声明了有返回值(不为void),但函数实现中忘记了return 返回值。要么函数确实没有返回值,则修改其返回值类型为void,要么在函数结束前返回合适的值。
(12)error C2006: #include expected a filename, found '(' / found 'identifier' / found 'newline'
直译:#include后需跟上一个文件名,却出现了'(' / '标识符' / '换行'。 错误分析:正确的#include举例为#include
#include (user.h) 或#include user.h 或#include (13) error C2039: 'aver' : is not a member of 'STU' 直译:'aver'不是结构体STU的成员。
错误分析:程序中定义了结构体类型STU,但其中并没有定义一个名字叫aver的成员,估计是忘了定义或成员名称拼写错误、前后不一致(例如定义结构体成员aver时错写为avre或Aver)。
(14)error C2043: illegal break 直译: 非法/无效的break。
错误分析:break的作用是跳出循环(for,while)或switch,但程序中break的位置却并非如此,例如以下代码将导致本错误的出现:
while (num1 > 6) ; {
break; }
7
(15)error C2046: illegal case / error C2047: illegal default 直译: 非法的case / 非法的default。
错误分析:case和default应处于switch语句里,但程序中其位置可能并非如此,例如以下代码将导致本错误的出现:
switch (num1) ; {
case 1: default: num2++; }
(16)error C2050: switch expression not integral 直译: switch所依据的表达式不是整数。
错误分析:语句“switch (表达式)”里的表达式的值必须是整数(char也可),例如以下代码将导致本错误的出现:
float num1; switch ( num1/10 ) {
?? }
将以上代码调整如下即可消除本错误:
switch ( (int)num1/10 ) {
?? }
(17)error C2051: case expression not constant 直译: case表达式不是常量。
错误分析:语句“case 表达式”里的表达式的值必须是常量,不能使用变量,例如以下代码将导致本错误的出现:
switch (?) {
case A: }
注:以上代码出错的原因可能是本应为“case 'A':”,改为“case \”也将导致本错误的出现。
(18)error C2079: 'da' uses undefined struct 'data' 直译: 定义变量'da'时使用了未定义的结构体'data'
错误分析:可能是结构体类型名data前后不一致引起,例如以下代码即会导致本错误:
struct Data {
int num;
char name[10]; };
8
struct data da;
(19)error C2081: 'num2' : name in formal parameter list illegal 直译: 名字'num2'在函数的形参列表中不合法。 错误分析:以下代码将导致本错误的出现:
int getMax(int num1, num2) {
?? }
将第一行代码改为“int getMax(int num1, int num2)”即完成修正。 (20)error C2122: 'num2' : prototype parameter in name list illegal 直译: 名字'num2'在函数的原型参数在名字列表中不合法。 错误分析:以下代码将导致本错误的出现:
int getMax(num1, int num2) {
?? }
将第一行代码改为“int getMax(int num1, int num2)”即完成修正。 (21)error C2082: redefinition of formal parameter 'aver' 直译: 重定义形参'aver'。
错误分析:在函数的形参里已有了变量aver的定义,在函数体中却又再次定义了变量aver,如以下代码:
int getNum(int num1, int num2, int aver) {
int sum, aver; ?? }
修改方案为:若aver不需要作为函数的必须参数,则从形参表的将其去掉;若必作参数,则在函数体中将其定义去掉。
(22)error C2172: 'fread' : actual parameter is not a pointer : parameter 1 直译: 调用函数'fread'时,参数1的实参不是指针。
错误分析:函数'fread'要求其第一参数为一指针,以下代码将导致本错误:
FILE *fp; float num; ?
fread(num, sizeof(num), 1, fp);
修改方案为:将fread所在行代码改为:fread(&num, sizeof(num), 1, fp); (23)error C2198: 'FindMin' : too few actual parameters 直译:调用函数'FindMin'时,实参个数太少。
错误分析:例如,函数'FindMin'被定义为有3个参数,但使用'FindMin'时却只给了2个
9
参数,就会导致本错误的出现。
(24)error C2087: '
错误分析:二维数组作为函数的形参时,容易出现本错误,如以下代码即出错:
int fun(int num[][], int n);
修改方案为指明行的大小,若传递的二维数组实际为int array[5][8],则上行改为“int fun(int num[][8], int n);”即解决问题。
(25)error C2133: 'num' : unknown size 直译: 定义数组num时,未知数组的大小。
错误分析:定义数组时(不是定义函数的形参),若未提供初始化数据,则必须指明数组的大小,如以下代码即出错:
int num[];
(26)error C2106: '=' : left operand must be l-value
直译: 对于赋值操作'=',其左操作数必须是左值(即可以存储数据的,一般是变量)。 错误分析:这种错误一般发生在if语句中,例如将if (3 == num)写成了if (3 = num)。注意,在比较一个变量之值和一个常量是否相等时,大多数的企业都要求将常量写在左边,以防止出现将'=='误写为'='——若将变量写在左边,则是合法的表达式,编译器因此将无法发现该错误而留下事故隐患。
(27)error C2108: subscript is not of integral type 直译: 数组下标不是整数类型。
错误分析:数组的下标必须是整数,如下代码将导致本错误的出现:
int num[10]; float i=1;
num[i] = 3;
(28)error C2109: subscript requires array or pointer type 直译: 下标引用需要数组或指针类型。
错误分析:对于数组或指针,可以使用下标的方式来访问相对于数组或指针起始地址若干位置的存储单元的数据,以下代码是正确的:
int num[10], *pArr; pArr = num; num[3] = 100; pArr[4] = 120;
其中num[3]表示以数组num首地址为起点的往后第3个单元,pArr[4]表示以指针pArr所指位置(此例中实际上是数组num的首地址)为起点的往后第4个单元(等价于num[4])。若将其中的“int num[10], *pArr;”改为“int num[10], pArr;”或“int num, *pArr;”,均将出现
10
共分享92篇相关文档