error C2143: 语法错误 : 缺少“;”(在“类型”的前面)

ciodragon 2009-12-09 07:23:00
我用vs2008编程的时候(大一,函数那一章),遇到好几次 error C2143: 语法错误 : 缺少“;”(在“类型”的前面),可是我检查了之后,并没有缺少“;”呀,到底应该怎么更正呢,求哪位高手指点一下
...全文
40240 41 打赏 收藏 转发到动态 举报
写回复
用AI写文章
41 条回复
切换为时间正序
请发表友善的回复…
发表回复
lt882002 2012-08-06
  • 打赏
  • 举报
回复
我在编译OGRE代码的时候,遇到这个问题。代码完全是从另一个运行通过的工程里拷过来的。就是出了这个问题。

原因很简单。就是在拷贝头文件过来时,由于函数内容是在头文件中所写。头文件大括号{}结束,一定要有分号";"。我拷贝的时候,把这个小符号,忘掉了。害得我找了大半天原因。
小黄老菜鸟 2011-07-26
  • 打赏
  • 举报
回复
int number;
stud *head;
number=N;
head=creat(number);
if(print(head)==SLIST_RETURN_OK)
{
printf("print success...\n");
}
else
{
printf("print. fail \n");
}
aband2004 2010-06-05
  • 打赏
  • 举报
回复
你这是C和C++语法混用 C不管什么时候声明变量都要放到函数的最开头,不像c++可以中间临时用
ciodragon 2009-12-11
  • 打赏
  • 举报
回复
35楼的代码,仍然有错误,不过谢谢你的认真帮忙
ciodragon 2009-12-11
  • 打赏
  • 举报
回复
error C2143: 语法错误 : 缺少“;”(在“类型”的前面)还是有错误呀,这vs为2008到底是什么回事呀,明明就没有错,他到底在干什么,强烈鄙视微软
yuezy3 2009-12-11
  • 打赏
  • 举报
回复
对不起,中间那复制时多了一点
yuezy3 2009-12-11
  • 打赏
  • 举报
回复
这样改:(请看中间我加的注释,按那个改就没问题)
#include <stdio.h>
main()
{
int a[3][3];
int change(int a[3][3]);
int i,j;
printf("input the array:\n");
for(i=0;i <3;i++)
for(j=0;j <3;j++)
{
scanf_s("%d",&a[i][j]);
printf("%d",a[i][j]);
}
int change(int a[3][3]);]);//这是函数调用。改为chang(a);另 将下面的change 函数的定义改为:
// int chang(int **b){//里面将所有a改成b。其他不变}
printf("the changed array is:\n"); //这里出错是因为上一句chang(int a[][])中int a[][]写法错误,编译器将其看做申明。

printf("the changed array is:\n"); //这里出错是因为上一句chang(int a[][])中int a[][]写法错误,编译器将其看做申明。
for(i=0;i <3;i++)
for(j=0;j <3;j++)
{
printf("%d",a[i][j]);
printf("\n");
}
}
change(int a[3][3])

{
int i,j;
for(i=0;i <3;i++)
for(j=0;j <3;j++)
{
a[i][j]=a[j][i];
}
}
smallbear_2008 2009-12-11
  • 打赏
  • 举报
回复
最开始写代码的时候,就要注意代码规范。
ciodragon 2009-12-11
  • 打赏
  • 举报
回复
告诉我解决方案
zwcs0801 2009-12-10
  • 打赏
  • 举报
回复
int change(int a[3][3]) 传法是有问题的吧
ChRedfield 2009-12-10
  • 打赏
  • 举报
回复

#include <stdio.h>

int change(int a[3][3]); // 函数定义放在Main函数外面,如果一定要放在Main函数里面 应放在
// printf("input the array:\n");前面

void main(void)
{
int a[3][3];

int i , j;

printf("input the array:\n");

for( i = 0; i < 3 ; i++ )
{ // 嵌套循环的话, 这里也加上{}
for(j=0;j <3;j++)
{
scanf("%d",&a[i][j]);
printf("%d",a[i][j]);
}
}

printf("the changed array is:\n");

for(i=0;i <3;i++)
{ // 嵌套循环的话, 这里也加上{}
for(j=0;j <3;j++)
{
printf("%d",a[i][j]);
printf("\n");
}
}
}

change(int a[3][3])
{
int i,j;
for(i=0;i <3;i++)
{ // 嵌套循环的话, 这里也加上{}
for(j=0;j <3;j++)
{
a[i][j]=a[j][i];
}
}

return 0; // 这里应该有一个返回值,看你的需要。 不知道你的意图,就写了一个0。
}
gahyyai 2009-12-10
  • 打赏
  • 举报
回复
mark
LPR_Pro 2009-12-10
  • 打赏
  • 举报
回复
有可能是声明的变量的类型没有引入
gadx86 2009-12-10
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 z569362161 的回复:]
很多编译器显示错误,并不是本行,而是上一行的错误。
[/Quote]
只有引用的内容不允许回复
yinshisike 2009-12-09
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 ciodragon 的回复:]
题目:输入一个3x3的二维数组,用一个函数实现行列互换
我的代码如下:
#include <stdio.h>
main()
{
int a[3][3];

int i,j;
printf("input the array:\n");
for(i=0;i <3;i++)
for(j=0;j <3;j++)
{
scanf_s("%d",&a[i][j]);
printf("%d",a[i][j]);
}
int change(int a[3][3]); //一般函数都声明不写在这里,当然了写在这里也没有错.
printf("the changed array is:\n");//语法错误 : 缺少“;”(在“类型”的前面)
for(i=0;i <3;i++)
for(j=0;j <3;j++)
{
printf("%d",a[i][j]);
printf("\n");
}
}
change(int a[3][3]) ///这里没有类型,目前MS C++ 不支持默认的类型

{
int i,j;
for(i=0;i <3;i++)
for(j=0;j <3;j++)
{
a[i][j]=a[j][i];
}
}

[/Quote]

//问题不大.
ciodragon 2009-12-09
  • 打赏
  • 举报
回复
#include <stdio.h>
main()
{
int a[3][3];
int change(int a[3][3]);
int i,j;
printf("input the array:\n");
for(i=0;i<3;i++)
for(j=0;j<3;j++)
{
scanf_s("%d",&a[i][j]);
printf("%d",a[i][j]);
}
int change(int a[3][3]);
printf("the changed array is:\n");
for(i=0;i<3;i++)
for(j=0;j<3;j++)
{
printf("%d",a[i][j]);
printf("\n");
}
}
change(int a[3][3])

{
int i,j;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
{
a[i][j]=a[j][i];
}
}
ciodragon 2009-12-09
  • 打赏
  • 举报
回复
#include <stdio.h>
main()
{
int a[3][3];
int change(int a[3][3]);
int i,j;
printf("input the array:\n");
for(i=0;i<3;i++)
for(j=0;j<3;j++)
{
scanf_s("%d",&a[i][j]);
printf("%d",a[i][j]);
}
int change(int a[3][3]);
printf("the changed array is:\n");
for(i=0;i<3;i++)
for(j=0;j<3;j++)
{
printf("%d",a[i][j]);
printf("\n");
}
}
change(int a[3][3])

{
int i,j;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
{
a[i][j]=a[j][i];
}
}
freshui 2009-12-09
  • 打赏
  • 举报
回复

#include <stdio.h>

int change(int a[3][3])

{
int i,j;
for(i=0;i <3;i++)
for(j=0;j <3;j++)
{
a[i][j]=a[j][i];
}
}
main()
{
int a[3][3];

int i,j;
printf("input the array:\n");
for(i=0;i <3;i++)
for(j=0;j <3;j++)
{
scanf_s("%d",&a[i][j]);
printf("%d",a[i][j]);
}

change(a);
printf("the changed array is:\n");
for(i=0;i <3;i++)
for(j=0;j <3;j++)
{
printf("%d",a[i][j]);
printf("\n");
}
}

ciodragon 2009-12-09
  • 打赏
  • 举报
回复
怎么用那个”插入源码“呀,那个按钮是找到了,但是刚来这论坛,不太熟息
ciodragon 2009-12-09
  • 打赏
  • 举报
回复
#include <stdio.h>
main()
{
int a[3][3];

int i,j;
printf("input the array:\n");
for(i=0;i<3;i++)
for(j=0;j<3;j++)
{
scanf_s("%d",&a[i][j]);
printf("%d",a[i][j]);
}
int change(int a[3][3]);
printf("the changed array is:\n");
for(i=0;i<3;i++)
for(j=0;j<3;j++)
{
printf("%d",a[i][j]);
printf("\n");
}
}
change(int a[3][3])

{
int i,j;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
{
a[i][j]=a[j][i];
}
}




加载更多回复(21)
网上下载了emule0.50a-Xtreme8.1-sources源码,声称可以在VS2008下直接编译成功,经我实际测试,系统会报错,其中第一类错误,由于系统中为了兼容VISTA/WIN7,增加了相关定义,而这些定义在XP/WIN2003环境下会报错,共771个错误,如: 错误 2 error C2065: “ITaskbarList3”: 未声明的标识符 d:\emule相关资料\emule0.50a-xtreme\emule0.50a-xtreme8.1-sources\srchybrid\emuleDlg.h 195 emule 错误 3 error C2146: 语法错误 : 缺少“;”(在标识符“m_thbButtons”的前面) d:\emule相关资料\emule0.50a-xtreme\emule0.50a-xtreme8.1-sources\srchybrid\emuleDlg.h 196 emule 错误 4 error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int d:\emule相关资料\emule0.50a-xtreme\emule0.50a-xtreme8.1-sources\srchybrid\emuleDlg.h 196 emule 错误 5 error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int d:\emule相关资料\emule0.50a-xtreme\emule0.50a-xtreme8.1-sources\srchybrid\emuleDlg.h 196 emule 错误 6 error C2146: 语法错误 : 缺少“;”(在标识符“m_currentTBP_state”的前面) d:\emule相关资料\emule0.50a-xtreme\emule0.50a-xtreme8.1-sources\srchybrid\emuleDlg.h 198 emule 错误 7 error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int d:\emule相关资料\emule0.50a-xtreme\emule0.50a-xtreme8.1-sources\srchybrid\emuleDlg.h 198 emule 错误 8 error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int d:\emule相关资料\emule0.50a-xtreme\emule0.50a-xtreme8.1-sources\srchybrid\emuleDlg.h 198 emule 错误 10 error C2065: “ITaskbarList3”: 未声明的标识符 d:\emule相关资料\emule0.50a-xtreme\emule0.50a-xtreme8.1-sources\srchybrid\emuleDlg.h 195 emule ...... 此类错误中,ITaskbarList3是VISTA/WIN7环境下与任务栏相关的变量,只要屏闭掉相关定义就能正常。 除此之外还报有下面 5 个错误(实际引起错误的位置只有两个): 错误 135 error C2059: 语法错误 : “:” d:\eMule\srchybrid\BaseClient.cpp 1603 emule 错误 136 error C2065: “tagName”: 未声明的标识符 d:\eMule\srchybrid\BaseClient.cpp 1604 emule 错误 137 error C2228: “.WriteTagToFile”的左边必须有类/结构/联合 d:\eMule\srchybrid\BaseClient.cpp 1604 emule 错误 139 error C2001: 常量中有换行符 d:\eMule\srchybrid\BaseClient.cpp 4832 emule 错误 140 fatal error C1057: 宏展开中遇到意外的文件结束 d:\eMule\srchybrid\BaseClient.cpp 4832 emule 此类错误中,实际上是是两个语法错误,由于太过简单,我与网友都怀疑是作者故意制造的错误,若是完全不懂C++的人,即使拿到源码,编也会报错,从而止步于此。而稍懂C++的人(本人即是此类菜鸟),则可以找出错误之处。 为方便诸多象我一样的初学者,我把修正之后,可以在 XP/WIN2003 +VS2003SP1 环境下直接编译成功的emule0.50a-Xtreme8.1-sources源码发布上来,以便互相学习交流。

70,014

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧