这个错误让人懵圈的地方就在于它不会给出错误出现的位置,让已经写了几百行的你痛不欲生。
可执行文件被占用了
因此编译器无法覆盖旧的可执行文件,所以编译失败。
这很有可能是你没发现它还没结束运行。
(我目前在用的 IDE:Visual Studio Code)
扩展:C/C++ Compile Run(可以方便地编译单个 cpp 文件,且不会因为路径中存在空格或中文出错。)
解决方案
Dev C++ 等 IDE 直接把弹出的窗口(黑框)关了就行了
VS Code 可以从输出切换到终端选项卡,使用快捷键 Ctrl+C 结束程序(同样适用于 external console )。
实在不行就用任务管理器和 taskkill 吧
主函数不存在(main 拼写错误)
你不太可能不写主函数,但是你很有可能把 main
打成 mian
或者什么其他奇怪的东西。
在编译器眼里,这些可不能算主函数。
解决方案
把 main
拼对。
所调用的函数仅进行了声明
这种情况下新版编译器仍旧会输出 error: ld returned 1 exit status
这一让人迷惑的错误。
但是一般也不会把函数体和声明分开写吧…
(函数声明在主函数上方即可,函数体是可以写在 main 函数下方的。)
解决方案
把漏写了的函数体补上。
(旧版编译器)在主函数中定义了函数
新版编译器发现你在 main 函数中定义了其它函数报错并不是error: ld returned 1 exit status
,
而是error: a function-definition is not allowed here before '{' token
解决方案
把子函数定义在主函数外面。
(旧版编译器)调用了不存在的函数
一般情况下应该是所需头文件未引入或者函数名键入错误。
并不确定“scanf/printf 键入错误”是不是真的会引起该错误(CSDN 上的一篇博客说的,我也懒得去装个旧版编译器实测),是不是只有 scanf 和 printf 会这样更不得而知…
总之新版编译器即使在 CSDN 博文中所谓的“代码较多的情况”下也不会因为这个原因出现这种错误,只会告诉你这个函数在这个作用域没有被定义过,甚至还会反问你:
你说的是 scanf 吗?
(测试用代码是随机跳题后从这里复制的,并未提交评测)
解决方案
检查函数名称的拼写是否正确。
如果想调用库函数但不清楚应该引入什么头文件,可以在搜索引擎上像这样搜索:
sqrt() 所在的头文件
C++ sqrt()
C语言 sqrt()
或者直接 #include <bits/stdc++.h>
本文的测试环境
|
|
编辑记录
2021-08-22 19:20:00