我正在尝试使用对本网站上不同帖子的回答来实现线程安全的随机数生成器。 Xcode 在一些系统提供的源代码中给我一个编译错误。我已经删除了所有的内容,这是将在最新的最新 Xcode 上重现错误的最少代码。
#include <random>
#include <climits>
using namespace std;
mt19937 * _generator = NULL;
template <typename T> T ts_rand(void)
{
uniform_int_distribution<T> distribution(0, INT_MAX);
static bool fInited = false;
if (!fInited)
{
_generator = new mt19937();
fInited = true;
}
return distribution(_generator);
}
int main(int argc, const char * argv[])
{
int random_number = ts_rand<int>();
return random_number;
}
当我尝试编译它时,我在文件“算法”的第 2843 行和第 2865 行中收到错误消息:“语义问题类型‘std::__1::mersenne_twister_engine * 不能在‘::’之前使用,因为它没有成员”。
如果我将 _generator 更改为实际实例而不是指针,它可以正常编译。所以这让我觉得我不理解这种模板的使用,而不是系统提供的文件中的错误。 FWIW,同样的构造在 VS 2013 上编译和运行良好。
StackOverflow 建议的类似问题似乎表明这可能与 VS 对未完全定义的模板类的慷慨解释有关,但我不知所措。
感谢任何提示。
最佳答案
您的 _generator
是一个指针,但是 uniform_int_distribution::operator()
需要对 UniformRandomNumberGenerator
的引用。
你只需要做:
return distribution(*_generator);
关于c++ - 梅森扭曲随机生成器函数模板的 Xcode 编译器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30745119/