11. 常见错误和错误消息
常见错误和错误消息
你刚开始编写 C++ 代码时,运行代码可能会碰到一些错误。即便一些简单的错误,比如冒号,确实也可能产生非常冗长、难以处理的 C++ 错误。在本部分,我们会介绍 C++ 代码编写过程中可能碰到的一些常见错误。
这样可以让你更从容地调试代码。
下面是一个简单的程序,你在本课开始时看到过。该程序定义了一个整数 x,为其赋值 5,然后向终端输出了结果。
# include <iostream>
int main ()
{
int x;
x = 5;
std::cout << x << std::endl;
return 0;
}
分号错误
如果语句末尾忘记添加分号,会发生什么?
# include <iostream>
int main ()
{
int x
x = 5;
std::cout << x;
return 0;
}
main.cpp:6:7: error: expected ';' at end of declaration
int x
^
;
产生 1 个错误。
错误消息说,main.cpp 中第 6 行代码的第 7 个字符应该以分号结束。C++ 中的每个命令都应该以分号结束。
声明并定义变量错误
如果忘记定义变量,又会发生什么?
# include <iostream>
int main ()
{
x = 5;
std::cout << x;
return 0;
}
main.cpp:6:2: error: use of undeclared identifier 'x'
x = 5;
^
main.cpp:8:15: error: use of undeclared identifier 'x'
std::cout << x << std::endl;
^
产生 2 个错误。
产生了两个错误:每次出现 x 变量时出现一个错误。错误消息说,在第 6 行的第 2 个字符上,变量 x 需要声明。在第 8 行的第 15 个字符上也发生了同样的错误。
未声明的标识符
错误表明变量需要一个数据类型定义,如
int x;
。
命名空间错误
如果在命令行
std::cout
中忘记了
std
,会发生什么?
# include <iostream>
int main ()
{
int x;
x = 5;
cout << x;
return 0;
}
main.cpp:9:2: error: use of undeclared identifier 'cout'; did you mean
'std::cout'?
cout << x;
^~~~
std::cout
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/iostream:54:33: note:
'std::cout' declared here
extern _LIBCPP_FUNC_VIS ostream cout;
^
产生 1 个错误。
所有 11 行都指向一个错误!但是,如果你逐行阅读错误消息,你可以得到很多有用信息。最重要的部分在刚开始,消息说在第 9 行的第 2 个字符有有一个未声明的标识符
cout
。错误消息提示说,你可能希望使用的是
std:: cout
。
其余的错误消息指出了
std:: cout
的原始定义文件。
库包括错误
如果忘记包括定义了
std::cout
的库,会发生什么?
int main ()
{
int x;
x = 5;
std::cout << x;
return 0;
}
main.cpp:7:2: error: use of undeclared identifier 'std'
std::cout << x;
^
产生 1 个错误。
错误消息说,C++ 未识别第 7 行第 2 个字符
std
的意思。
std
的定义在标准库的 iostream 文件中,这个文件需要在程序顶部包括进来,使用命令行
# include <iostream>
。否则,程序将无法识别
std
的意思。
综述
迄今位置,你已经看到了程序每次产生一个错误的情形。如果有多个错误,会怎么样?
int main ()
{
x = 5;
cout << x;
return 0
}
main.cpp:4:2: error: use of undeclared identifier 'x'
x = 5;
^
main.cpp:6:2: error: use of undeclared identifier 'cout'
cout << x;
^
main.cpp:6:10: error: use of undeclared identifier 'x'
cout << x;
^
main.cpp:8:10: error: expected ';' after return statement
return 0
^
;
产生 4 个错误。
你会看到一个错误列表,从程序顶部开始,一直到最后。
未声明的标识说明一个变量或函数需要定义。分号错误则提醒你所有的 C++ 命令都需要以分号结尾。
运行代码时,你可能会得到一个很长的错误列表,这些错误很难破译。通常来说,错误的第一行提供了最重要的信息,所以我们首先查看输出的顶部。如果你不知道错误的含义,可以复制错误文本并将其粘贴到搜索引擎中。通常情况下,网上都会有资源解释错误详情,以及如何解决问题。
小测试:修复代码
点击下面的“测试运行”按钮。你会看到,这个代码有很多错误。修复错误,直到解决方案有效为止。您可以忽略 “Traceback” 错误下面的所有内容,这些错误不是C ++错误;traceback 错误与运行编码测验的 Python 后端有关。
Start Quiz:
int main ()
{
x = 25
y = 61.4
z = 199.2
division = y / z
cout << x << '\n'
cout << y << '\n'
cout << division << '\n'
return 0
}