我继承了一个2014年编写的C ++项目,并且确实使用GCC 4.8进行了编译。在特定文件中,实例化了当前在C ++标准库的<random>
头中找到的几个类。其中包括mt19937
,random_device
,uniform_real_distribution
和normal_distribution
。
当我使用GCC 7.3编译此文件时,出现一条错误消息,指出这些类未在std
名称空间中定义。当我包含<random>
时,此错误(显然)消失了。
我的问题是,为什么在GCC 4.8中不会发生此错误?这些类以前是否在其他标头下找到?
答案 0 :(得分:3)
Standard headers may include other headers。当他们共享一个实现时,这可能会很有用。但是,这些事情可能会随着时间而改变,例如当公共部分重构为第三个(内部)头文件时。
由于我们不确切知道<random>
是如何间接包含在GCC4.8中的,因此我们对所发生的事情不能绝对肯定,但这并不奇怪。