0

我继承了一个 2014 年编写的 C++ 项目,并且确实使用 GCC 4.8 进行编译。在一个特定的文件中,当前在<random>C++ 标准库的头文件中找到的几个类被实例化。其中包括mt19937random_deviceuniform_real_distributionnormal_distribution

当我使用 GCC 7.3 编译此文件时,我收到一条错误消息,指出这些类未在std命名空间中定义。当我包含<random>.

我的问题是为什么在 GCC 4.8 中不会发生此错误?这些类以前是在不同的标题下找到的吗?

4

1 回答 1

3

标准标头可能包括其他标头。当他们共享一个实现时,这可能很有用。然而,这些事情会随着时间而改变,例如,当公共部分被重构为第三个(内部)头文件时。

由于我们不确切知道<random>GCC4.8 是如何间接包含在内的,因此我们不能绝对肯定发生的事情,但这并不奇怪。

于 2018-11-13T08:33:20.430 回答