1:首先,解决function definition is not allow here

function definition is not allow here=函数定义在此不被允许,说明函数定义格式有问题,
解决方法
1:看函数有没有漏打了一个大括号(“{”或“}”)——百度大流,
2:看报错函数里面的引用函数或者报错函数上面的函数有没有漏打或者打错大括号,可使用注释排除法括号检验法
具体发现过程如下:
函数定义格式标准为:函数类型 函数名(变量){},而通过百度到的答案大都是看看函数有没有漏打了一个大括号(“{”或“}”),
而我的文件报错是在main函数和另一个函数上的,但main函数就几行,没发现有什么不同,于是采取注释排除法,把main函数所引用的函数一个一个地注释掉,希望能知道是哪个函数出了问题,但就算是全部注释掉了,问题还在,说明不是这个问题了,
这时候又突然想起,在新加一个函数之前,整个文件都是编译ok的,所以很有可能是这个函数的原因(该函数内有几个嵌套的选择函数,所以一个函数里面有3对“{}”,且前后错开不明显),但是乍一看那个函数,也没发现什么问题,直到我点了一下大括号(括号检验法),才发现蹊跷,因为函数的大括号都是成对出现,点击一个,亮起来的另一个应该是它的“另一半”,两个大括号共同包含着一个函数执行体。而现实却是,亮的是其中一个嵌套函数的一个括号,这就说明存在问题了,然后仔细对比才发现,原来我把“{}”打成了“{{”(细看大括号的指向),改正之后就没问题了,但之前程序报错是main函数和另外一个函数上的,而这两个函数都没有直接或间接调用问题函数。由此有两点问题:
1:大括号写错了,软件没能判断出来错误的具体位置,
2:软件知道有错误了,在错误函数下面的正确函数里指示错误。

2:然后,解决Undefined symbol XXX (referred from main.o)

Undefined symbol XXX (referred from main.o)=无定义的XXX(在main.c里存在的),说明是定义出现问题,
解决方法
1:在“main.c”的前部对变量进行声明,
2:注释掉问题变量,
3:检查变量名有没有写错,
我写的文件中,报错的XXX是函数,在main函数里报错,这个函数在“.c”里定义了,在相应的头文件里说明了,还在“main.c”的前部再说明了,在“main.c”也加了那个头文件,应该没问题的啊,而且乍一看,也还是看不出什么问题来,于是我试过把报错函数换一种简单的表达方式,也试过把报错函数复制到main函数上面,但报错还在,于是重新理了一下思路,从源头入手:这个报错函数的定义只在三个文件里出现过,于是我把这三个定义一个字母一个字母地看一遍,发现原来报错函数在头文件说明时,其函数名其中一个大写字母被写成了小写的,改回来之后,一切正常,看来在变量(或函数名)的定义中(特别是在多个文件的相同定义)最好复制粘贴,以防出现类似的低级错误。

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐