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
}